javascript - BackboneJs - 模型或集合是否应该具有 View 知识

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

在我从 SO answers here 和许多 BackBoneJs 示例中选择的示例之一中,我看到初始化函数知道模型将使用哪个 View 进行渲染。我不知道我现在有点偏见,这是一个好的做法还是取决于正在开发的应用程序类型。

例子

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

编辑 fiddle

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 );
        })

在 edited fiddle collection 中是由一个 view 渲染的,我们也可以使用更多的 views 来渲染 collection。

最佳答案

我完全赞成使用事件, 我自己不想将绑定(bind)移到模型之外,我会像原始示例一样将它们保留在那里

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);
});

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

简而言之,我在外部创建 View ,监听被触发的事件,但集合上的绑定(bind)保留在集合代码中。我发现将所有收集代码放在同一个地方更易于管理。

关于javascript - BackboneJs - 模型或集合是否应该具有 View 知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8907425/

相关文章:

javascript - 自动关闭切换菜单的ul

javascript - 无法通过 chrome 扩展 popup.js 通过 ajax post 将 JSON 请求发送到 hubspot 创建联系人 api

ios - removeObjectFromSuperView 不使用 if 语句

php - MVC : models interacts with the view?

ruby-on-rails - 我怎样才能正确地将选择集合放到form_tag中?

javascript - Kml 文件显示高程剖面

javascript - 为什么我在使用 RequireJS 时同时收到 "$jQval is undefined"和 "$.validator.unobtrusive is undefined"?

model-view-controller - 使用 ActionMailer.Net 发送电子邮件时如何设置 EnableSsl=True?

swift - 使用堆栈 View 时的对齐问题

css - 如何创建不遵循 site.css 模板的 View ?