BackboneJs - 模型或集合应该具有视图知识

时间:2012-01-18 08:54:44

标签: javascript model-view-controller views backbone.js underscore.js

在我从这里的SO答案和许多BackBoneJs示例中选择的一个示例中,我看到initialize函数知道将使用哪个视图呈现模型。我不知道我现在有点偏颇,这是一个好的做法还是取决于正在开发的应用程序的类型。

实施例

http://jsfiddle.net/thomas/Yqk5A/

编辑小提琴

http://jsfiddle.net/Yqk5A/187/

代码参考

FriendList = Backbone.Collection.extend({
    initialize: function(){
        this.bind("add", function( model ){
            alert("hey");
            view.render( model );
        })
    }
});

以上是良好做法还是以下

var friendslist = new FriendList;
var view = new FriendView({el: 'body'});
friendslist.bind("add", function( model ){
            alert("hey" + model.get("name"));
            view.render( model );
        })
编辑的小提琴集合中的

由视图呈现,我们还可以使用更多视图来呈现集合。

1 个答案:

答案 0 :(得分:2)

我全都是为了使用活动, 我自己不想将绑定移到模型之外,我会像原始示例一样将它们保留在那里

var app = {};
app.evt = _.extend({}, Backbone.Events);  // adding a global event aggregator 

FriendList = Backbone.Collection.extend({
    initialize: function(){
        this.bind("add", function( model ){
            alert("hey");
            app.evt.trigger('addfriend', model);
        })
    }
});

//further in your code you can bind to that event
app.evt.bind("addfriend", function(model){
    var view = new FriendView({el: 'body'});
    view.render(model);
});

然而,我发现这个例子有点奇怪,创建一个新的视图,将body作为元素,并通过给渲染函数提供模型来渲染它。如果使用模型作为属性创建视图,然后将内容呈现到正文中,我会发现它更具逻辑性。但那是另一个主题。

简而言之,我移动创建外部视图,侦听正在触发的事件,但集合上的绑定仍保留在集合代码中。我发现将所有集合代码保存在同一个地方更容易管理。