Javascript 主干无法读取属性';财产';主干视图中未定义错误的定义
我刚决定学习脊梁骨。我在看视频教程。在那里一切都很好,但在我的末尾我得到了这个错误“uncaughttypeerror:无法读取未定义的属性'name' 这是我的密码: var MenuItemDetails = Backbone.View.extend({ render: function() { var markup = this.options.name + this.options.category + this.options.imagepath; // I also had some html markup in the string above, of course, but I've striped it because stackoverflow didn't show it in the preview of my post. this.$el.html(markup); return this; } }); var AppRouter = Backbone.Router.extend({ routes: { "" : "list", "menu-items/new" : "itemForm", "menu-items/:item" : "itemDetails" }, list: function() { $('#app').html('List screen'); }, itemDetails: function(item) { var view = new MenuItemDetails({ name: item, category: 'Some category', imagepath: 'no-image.jpg' }); $('#app').html(view.render().el); }, itemForm: function() { $('#app').html('New item form'); } }); var app = new AppRouter(); $(function() { Backbone.history.start(); }); var MenuItemDetails=Backbone.View.extend({ render:function(){ var markup=this.options.name+this.options.category+this.options.imagepath; //当然,我在上面的字符串中也有一些html标记,但我已经将其条带化,因为stackoverflow没有在我的文章预览中显示它。 这个.$el.html(标记); 归还这个; } }); var AppRouter=Backbone.Router.extend({ 路线:{ “:”列表“, “菜单项/新建”:“项目表单”, “菜单项/:项”:“项详细信息” }, 列表:函数(){ $('#app').html('列表屏幕'); }, itemDetails:功能(项目){ var view=new MenuItemDetails({name:item,category:'Some category',imagepath:'no image.jpg'}); $('#app').html(view.render().el); }, itemForm:function(){ $('#app').html('新项目表单'); } }); var app=新批准者(); $(函数(){ Backbone.history.start(); }); “itemDetails”函数给出了“UncaughtTypeError:无法读取未定义的属性“name”错误。当然,如果我不在视图中使用'name'属性,我会得到“uncaughttypeerror:无法读取未定义的'category'属性”。在我下面的视频教程中,一切正常(它使用backbonejs的0.9.1版)。我使用最新版本(1.1.0) 有人知道我为什么会犯这个错误吗?Javascript 主干无法读取属性';财产';主干视图中未定义错误的定义,javascript,backbone.js,backbone-views,Javascript,Backbone.js,Backbone Views,我刚决定学习脊梁骨。我在看视频教程。在那里一切都很好,但在我的末尾我得到了这个错误“uncaughttypeerror:无法读取未定义的属性'name' 这是我的密码: var MenuItemDetails = Backbone.View.extend({ render: function() { var markup = this.options.name + this.options.category + this.options.imagepath
没有任何拼写错误,所有内容都按正确的顺序排列(与视频教程中的内容完全相同)。为什么主干向我抛出此错误?主干视图用于自动将构造函数选项复制到
此。选项
:
更改日志1.1.0-2013年10月10日
- 主干视图不再自动附加作为
this.options传递给构造函数的选项,但是如果愿意,您可以自己执行
此.options
,则您必须自己执行此操作:
var MenuItemDetails = Backbone.View.extend({
initialize: function(options) {
this.options = options;
},
//...
});
或者更好的方法是,解压缩选项,以便了解视图的界面:
initialize: function(options) {
this.options = _(options).pick('name', 'category', 'imagepath');
}
这样,您至少有一个您希望在
选项中看到的列表
我喜欢选项的白名单。另一个值得一读的答案是:)@nikoshr:是的,我从来都不喜欢自动这个。选项之类的东西,太多不可追踪的东西。“我应该如何在六个月内调试这个远程操作的东西?”我喜欢的魔法。