0

我对 Backbone 很陌生,正在做一个简单的教程。我一直遇到一个我不明白的错误。这是我的代码。

(function($) {
    dataModel = new Backbone.Model.extend({
        data: [
        {text: "Google", href: "www.google.com"},
        {text: "Yahoo", href: "www.yahoo.com"},
        {text: "Youtube", href: "www.youtube.com"},
        ]
    });

var View = Backbone.View.extend({
    initialize: function(){
        this.template = $('#list-template').children();
    },
    el: $('#container'),
    events: {
        "click button": "render"
    },
    render: function(){
        var data = this.model.get('data');
        for(var i = 0, l = data.length; i < l; i++){
            var li = this.template.clone().find('a').attr('href', data[i].href).text(data[i].text).end();
            this.el.find('ul').append(li);
        }
    }
});

var view = new View({ model: dataModel });
})(jQuery);

当我打电话时,this.model.get('data')我得到了错误TypeError: Object function (){return a.apply(this,arguments)} has no method 'get'。请告诉我我的错误。谢谢。

4

3 回答 3

2

扩展模型时传递的所有属性和方法都是在其原型上设置的,而不是其属性,dataModel这里不是 Backbone 模型实例,而是 Backbone Model 子类。如果以这种方式访问​​ data 属性,您需要实例化模型并执行一个modelInstance.data而不是modelInstance.get('data')当数据被设置为模型属性时,如下例所示。

你想在这里做的是

var dataModel = new Backbone.Model({ // without the extend!
    data: [
    {text: "Google", href: "www.google.com"},
    {text: "Yahoo", href: "www.yahoo.com"},
    {text: "Youtube", href: "www.youtube.com"},
    ]
});

因为您想创建模型的实例而不是子类 Backbone.Model 类。Extend方法用于子类化核心 Backbone 类——视图、模型、集合和路由器。

于 2012-11-15T11:49:42.920 回答
0

您的“数据模型”只是模型的定义。您需要在将模型实例new dataModel()传递给视图时通过调用来创建它。

于 2012-11-15T11:50:55.413 回答
0

模型只定义一个数据元素的结构

Model
    defaults:
       text : null
       href : null

你需要的是一个集合

Collection
    model : Model

然后,您可以使用 .add 将数据设置为集合

Collection.add([
    {text: "Google", href: "www.google.com"},
    {text: "Yahoo", href: "www.yahoo.com"},
    {text: "Youtube", href: "www.youtube.com"},
])

要从集合中获取数据,请看这里 http://underscorejs.org/#collections

希望能帮助到你

于 2012-11-15T11:52:55.703 回答