主干无法读取主干视图中未定义错误的属性'property'



我刚刚决定学习骨干。我正在学习一个视频教程。在那里一切都很好,但在我结束时,我得到了这个错误"Uncaught TypeError:无法读取未定义的属性'name'"。

这是我的代码:

var MenuItemDetails=主干。视图扩展({渲染:函数(){var markup=this.options.name+this.options.category+this.options.imagepath;//当然,我在上面的字符串中也有一些html标记,但我已经将其条纹化了,因为stackoverflow没有在我的文章预览中显示它。这个$el.html(标记);返回此;}});var AppRouter=主干网。路由器扩展({路线:{":"列表","菜单项/new":"itemForm","菜单项/:item":"itemDetails"},列表:函数(){$('#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=新的AppRouter();$(函数(){Backbone.history.start();});

"itemDetails"函数给出了"Uncaught TypeError:无法读取未定义的属性'name'"错误。当然,如果我在视图中不使用"name"属性,我会得到"Uncaught TypeError:无法读取未定义的属性"category"。在我下面的视频教程中,一切都很好(它使用了backbonej的0.9.1版本)。我使用最新的(1.1.0)。

有人知道我为什么会犯这个错误吗?没有任何拼写错误,所有内容都按正确的顺序排列(与视频教程中的内容完全一样)。为什么骨干会给我这个错误?

用于自动将构造函数选项复制到this.options但不再是的主干视图

更改日志
1.1.0-2013年10月10日

  • 主干视图不再自动附加作为this.options传递给构造函数的选项,但如果愿意,您可以自己附加

因此,如果你依赖于在你的视图中设置this.options,那么你必须自己做:

var MenuItemDetails = Backbone.View.extend({
    initialize: function(options) {
        this.options = options;
    },
    //...
});

或者更好的是,打开选项,这样你就知道你的视图的界面是什么:

initialize: function(options) {
    this.options = _(options).pick('name', 'category', 'imagepath');
}

通过这种方式,您至少有一个您希望在options中看到的内容的列表。

最新更新