2

click()如下代码片段所示,在返回函数中创建了一个主干集合和一些视图。

问题:如何productList使用 Javascript 控制台访问诸如 Collection 之类的主干.js 对象?this.productList不返回任何东西,所以我相信productList它不是window对象的直接孩子。那么我应该如何创建productList集合?

JS代码

$('#submit_btn').click(function() {
        console.log('do something');
    }, function() {

        this.productList = new ProductCollection();
        var self = this;
        self.productListView = new ProductListView({ collection: self.productList });
        this.productList.fetch({
            data: {gender: 'men'},
            processData: true
        });

    });
});
4

2 回答 2

2

现在在这种情况下,您不能将所有内容都放在匿名函数中,因此在函数执行后您无法访问它。无论如何,这不是做事的正确方式,也不是主干方式。

这就是我通常做事的方式,创建一个像 app 这样的中心命名空间,然后创建该命名空间的所有模型、集合和视图

window.App = {
   //model
   Curve : {},
   //collection
   CurveManager : {},
   //view
   Views : {},
   //controller
   Controller : {}
}

另外,我认为您应该从主干视图本身处理单击事件,这样您就可以相对容易地可视化事物。例如,在http://backbonejs.org/docs/todos.html中查看 AppView 事件。这应该使事情更加清晰。

这是代码的那一部分

var AppView = Backbone.View.extend({
    el: $("#todoapp"),
    statsTemplate: _.template($('#stats-template').html()),
    events: {
      "keypress #new-todo":  "createOnEnter",
      "click #clear-completed": "clearCompleted",
      "click #toggle-all": "toggleAllComplete"
    },

    .
    . // more code in between
    .

    createOnEnter: function(e) {
      if (e.keyCode != 13) return;
      if (!this.input.val()) return;

      Todos.create({title: this.input.val()});
      this.input.val('');
    },

我一般会在 github 上查看其他人的代码,并尝试了解他们如何做事以及应该如何做事,我建议你也这样做。它有很大帮助 :) 带注释的 todoapp 源代码非常干净而且很容易理解。

于 2012-08-31T15:50:14.913 回答
0

您可以将 productList 附加到该window对象。

$('#submit_btn').click(function() {
        console.log('do something');
    }, function() {

        window.productList = new ProductCollection();
        var self = this;
        self.productListView = new ProductListView({ collection: self.productList });
        window.productList.fetch({
            data: {gender: 'men'},
            processData: true
        });

    });
});

但是你最好像@avk 所说的那样重构你的代码submit_btn,这是Backbone 视图的一部分。

不管发生了什么,因为this在那个实例中是指运行代码的闭包,所以在将其导出到外部可用对象之前,它是不可访问的。

于 2012-08-31T15:54:25.443 回答