【问题标题】:Prevent itemView from being added to CompositeView after collection "add"防止在集合“添加”后将 itemView 添加到 CompositeView
【发布时间】:2014-05-10 16:01:24
【问题描述】:

我对 Backbone 和 Marionette 有疑问。我有一个 CompositeView 集合,人们可以在其中发表评论,这一切都很好,评论被添加并保存到服务器,但我不希望视图更新并显示新添加的评论。我试过这个:

App.Views.CommentsView = Backbone.Marionette.CompositeView.extend({
    template: '#article-comment-container',
    itemViewContainer: 'ul',
    itemView: App.Views.CommentView,
    collectionEvents: {
        "add": "modelAdded"
    },
    modelAdded: function(){
        console.log('Please do nothing!');
    }
});

但该项目仍然呈现在我的 modelAdded 函数顶部的页面中被调用。我可以在某个时候防止这种情况发生吗?

在不同的情况下,我希望将新项目添加到列表的顶部而不是底部。我是否必须重写整个 appendHtml 方法来实现这一点?

【问题讨论】:

    标签: backbone.js marionette


    【解决方案1】:

    设置集合事件add 只是将另一个处理程序添加到该事件的队列中;它不会替换任何其他事件,因此仍会发生默认的木偶行为。

    我假设您正在调用集合上的 create 方法来创建新的评论模型。如果是这种情况,您只需将silent 选项设置为true。现在add 事件不会触发,Marionette 也不会为该模型创建和渲染视图。你可以这样做:

    commentCollection.create(commentModel, {silent: true});
    

    至于你关于前置的第二个问题,是的,我会覆盖 appendHtml 方法。或者为了使方法名称与实际发生的情况保持一致,请创建一个名为 prependHtml 的方法,然后重写 renderItemView 方法以调用 prependHtml

    【讨论】:

    • 沉默:真的!我知道我忘记了一些很容易做到这一点的事情。我最终在这两种情况下都覆盖了 appendHtml 函数,但非常感谢你指出我显而易见的事情。
    猜你喜欢
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多