Backbone里两个view(或者说collection)怎么交互?
我有viewA、viewB,分别对应collectionA、collectionB(他们model类型相同)
目标:点击viewA中一个元素时,将这个元素对应的model添加到collectionB,viewB同上所述
我该怎么做?
var ViewA = Backbone.ViewA.extend({
el: $('xxx'),
.....
events: {
"click": "trans"
},
trans: function(event) {
var index = event.target.dataset.n;//通过data、元素index之类乱七八糟的获取序列号,总之不重要
//我疑惑的是下面的
var model = this.collection.at(index);
collectionB.add(model) //这样也太傻了吧
}
});
var viewA = new ViewA({collection: collectionA})
感觉别别扭扭,依赖乱七八糟的
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
楼主的意思比较清楚,而且感觉是对的,乱乱的,其实是因为这样写会太耦合,ViewA不应该包含ViewB
而最好通过事件进行交互。
如:
如果没有弄懂
Backbone
,不建议碰Marionette
,因为用不好它。View
是用来做什么的?它是用来render
内容的,所以对数据本身的操作详细过程怎么可以封装到View
里面?你可以在View
里面对Model
进行操作,但是操作本身请定义在Model
或者Collection
内。此外,
Backbone
直写复杂页面交互逻辑时确实不太好组织代码,所以我推荐你使用Marionette + Backbone
,像现在这种情况的话,在Marionette
内可以使用CollectionView
来处理Collection
,而使用ItemView
来处理单个Model
的情形。楼主的代码,我觉得写的没问题。不知楼主究竟是哪里不满意,想写成什么样子?
我觉得这完全看复用,如果viewA viewB都不会在别的地方复用,那怎么耦合都无所谓,没必要故意拆
如果其中某一个view会被复用,那么想想怎么被复用就知道怎么解耦了
顺便说一下以我揣测的这个系统的其余部分,我的做法可能是把A和B抽一个共同部分
ListView
出来,列表视图能够输出列表项被点击的事件,然后为题主这个情形写个新的叫ABListView
之类的玩意儿