gpt4 book ai didi

backbone.js - 如何让一个 View 知道另一个 View 的变化?

转载 作者:行者123 更新时间:2023-12-04 21:59:41 26 4
gpt4 key购买 nike

假设您正在制作一个音乐库应用程序。

您有一个带有流派列表的 View ,另一个显示所选流派的内容。当用户点击列表上的一个流派时,另一个 View 中的内容应该相应地更新。

这样做的最佳方法是什么,以便将依赖关系降至最低?

除了绘制单个流派的 View 之外,我还没有找到任何其他地方可以聆听鼠标点击。我可以从那里发送一个事件,但是让该事件更新绘制流派内容的另一个 View 的最佳方法是什么?谁应该收听该事件、流派内容 View 或其收藏?

编辑:我从应用程序的路由器实例化了两个 View ,并且我确实通过使 View 相互了解来使其工作,但这当然不是最佳的。

最佳答案

您可以创建一个简单的模型来保存应用程序状态,您不需要任何花哨的东西,只需要一包实现通常 Backbone 事件方法的数据:

var AppState  = Backbone.Model.extend({});
var app_state = new AppState();

然后,流派 ListView 将监听点击事件(正如您已经拥有的那样)并在有人更改时在应用程序状态模型上设置当前流派:
var Genres = Backbone.View.extend({
//...
choose: function(ev) {
// This would be the click handler for the genre,
// `.html()` is just for demonstration purposes, you'd
// probably use a data attribute in real life.
app_state.set({genre: $(ev.target).html() });
},
});

单个流派的 View 将监听 "change:genre"应用状态模型上的事件并随着类型的变化使用react:
var Genre = Backbone.View.extend({
initialize: function() {
_.bindAll(this, 'change_genre');
app_state.on('change:genre', this.change_genre);
},
//...
change_genre: function() {
// Refill the genre display...
}
});

演示: http://jsfiddle.net/ambiguous/mwBKm/1/

您可以为您想要的任何数据创建模型,模型是在 Backbone 中处理数据事件的一种便捷方式。作为一个额外的好处,这种方法可以很容易地保持应用程序的状态:只需将通常的 Backbone 持久性支持添加到 AppState你走吧。

如果你只需要一个简单的事件总线来推送非数据事件,你可以使用 Backbone 的 Events 构建简单事件聚合器的方法:
app.events = _.extend({}, Backbone.Events);

然后,假设您有一个全局 app命名空间,你可以这样说:
app.events.on('some-event', some_function);


app.events.trigger('some-event', arg1, arg2, ...);

关于backbone.js - 如何让一个 View 知道另一个 View 的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10697403/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com