如何从控制台访问主干对象

How to access Backbone objects from console?

本文关键字:对象 访问 控制台      更新时间:2023-09-26

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

问题:如何使用Javascript控制台访问backbone.js对象,如Collection productListthis.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
        });
    });
});

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

这就是我通常做事的方式,创建一个类似于应用程序的中心命名空间,然后将该命名空间的所有模型、集合和视图创建为

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注释的源代码非常干净,非常容易理解。

您可以将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指的是代码运行的闭包,所以在将其导出到外部可用对象之前,它是不可访问的。