gpt4 book ai didi

javascript - Backbone : Unable to override constructor

转载 作者:行者123 更新时间:2023-11-28 19:33:50 26 4
gpt4 key购买 nike

我正在尝试用我自己的构造函数覆盖 Backbone.Model 构造函数,以便能够从外部而不是作为创建的对象传递我的参数。

这是我的代码:

 var Video = Backbone.Model.extend({

constructor : function (videoUrl,imageSource,title,rating,description,starsImageSource){
this.videoUrl = videoUrl;
this.imageSource = imageSource;
this.title = title;
this.rating = rating;
this.description = description;
this.starsImageSource = starsImageSource;
Backbone.Model.apply(this, arguments);
}

});

尝试输入时

new Video("www.yahoo","coins.jpg","Yahoo",4,"hhhh","5stars.png")

出现以下错误:类型错误:“in”操作数 obj 无效这是我的内容:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.3.3/underscore-min.js" type="text/javascript"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.9.2/backbone-min.js" type="text/javascript"></script>
<script src="http://marionettejs.com/downloads/backbone.marionette.js" type="text/javascript"></script>

谢谢!

最佳答案

您有两件事需要纠正:

  1. 如前所述,优先使用 initialize 而不是 constructor

  2. 遵循新模型(属性、选项)的API。原因是主干将接受您的第一个参数并将其视为属性哈希。如果它不是一个对象,它可能会出现意想不到的行为。在这种情况下,您可能会遇到以下情况:

var Video = Backbone.Model.extend({
initialize : function (attrs, options){
_.extend(this, _.pick(options, 'videoUrl', 'imageSource', 'title', 'rating', 'description', 'starsImageSource'));
}
});

new Video(null, {
videoUrl:"www.yahoo",
imageSource: "coins.jpg",
title: "Yahoo",
rating: 4,
description: "hhhh",
starsImageSource: "5stars.png"
});

一个问题是:为什么要将这些参数分配为模型对象上的第一类参数,而不是模型属性?在这种情况下,您不需要添加构造函数,只需传递数据即可:

new Video({
videoUrl:"www.yahoo",
imageSource: "coins.jpg",
title: "Yahoo",
rating: 4,
description: "hhhh",
starsImageSource: "5stars.png"
});

关于javascript - Backbone : Unable to override constructor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26266036/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com