Backbone Events&范围

时间:2014-03-25 15:03:41

标签: javascript backbone.js backbone-views backbone-events

我是Backbone的新手,希望获得最佳实践方面的帮助。这是我的问题的简化版本:

我在表单中有几个按钮,每个按钮都有自己的Backbone Model和View。单击时,我想要使用该按钮的值填充一些输入字段(在这些按钮的范围之外)。

我想以可重用的方式编写它,所以我宁愿不定义一个只调用$("input").val(...);的事件处理程序。我也不是开发/收听自定义活动的忠实粉丝。

我开发的解决方案是在选项哈希中传递一个函数,该函数最终由View的事件处理程序调用。有没有更好的办法? 谢谢!

小提琴:http://jsfiddle.net/pmn4/XW955/

1 个答案:

答案 0 :(得分:1)

Backbone是事件驱动的库,因此最佳做法是使用事件来减少应用程序的部分耦合。因此,当单击某个按钮并在某种控制器/介体中监听时,您可以在视图上触发事件 - 这些对象了解应用程序的和平状态,并且可以在单击按钮时更改输入。

var ButtonSetController = _.extend({
    start: function(){
        var buttonSetCollection = new ButtonList([{val: "A"}, {val: "B"}, {val: "C"}]),
            buttonSetView = new ButtonListView({collection: buttonSetCollection});

        this.listenTo(buttonSetView, "button:clicked", this.onButtonClicked);

        $("form").append(buttonSetView.render().el);  
    },
    onButtonClicked: function(button){
        $("input").val(button.get("val"));
    },
    stop: function(){
        this.stopListening();
    }
}, Backbone.Events);

ButtonSetController.start();

以下是代码:http://jsfiddle.net/8aY3M/