1

これらの機能を持つビューがあります-

  initialize:=>
    @populateSearchHistory()
    @el

  populateSearchHistory:=>
    console.log(pastSearches)
    @$el.find("#searchHistoryContainer").append(Handlebars.templates["$$ uri $$-searchHistory"]())
    @collection.add(stuff)


  @collection.on "add", (toAdd)->
    console.log(toAdd)

ただし、「追加」はログに記録されません。何が起こっている?

アップデート-

初期化関数でこれを試しました-

initialize:=>
  @collection.on "add", @populateSearchHistory

populateSearchHistory の現在の場所

populateSearchHistory:(toAdd)=>
  console.log(toAdd)

しかし、toAdd は空のモデルです。追加した値が必要です。

UPDATE- コンパイルされた JavaScript

var _this = this;

({
  initialize: function() {
    _this.populateSearchHistory();
    return _this.el;
  },
  populateSearchHistory: function() {
    console.log(pastSearches);
    _this.$el.find("#searchHistoryContainer").append(Handlebars.templates["$$ uri $$-searchHistory"]());
    return _this.collection.add(stuff);
  }
});

this.collection.on("add", function(toAdd) {
  return console.log(toAdd);
});

アップデート

OK - init 関数のバインドが機能し、初期化されていないクエリが渡されたのは、for ループがコレクションを通過し、コレクション内の各モデルを追加したためです - 各モデルは未定義でした - なぜこれが起こっているのですか?

4

1 に答える 1

0

ここでjsfiddle(更新):http://jsfiddle.net/85YxD/

SearchModel = Backbone.Model.extend();

SearchCollection = Backbone.Collection.extend({
    model : SearchModel
});

myCollection = new SearchCollection();

SearchView = Backbone.View.extend({

   initialize: function() {
       var _this = this;
        _this.populateSearchHistory();
   },

    populateSearchHistory: function() {
        var _this = this;
       // your code here
       var stuff = new SearchModel({
          key : 'value'          
       })

       //model can be added both way 
       console.log('model1 added.......');
       _this.options.list.add(stuff);

       //Or,  
       console.log('model2 added.......');
      _this.options.list.add({
          key1 : 'value1',
          key2 : 'value2'
       });

       //TODO : add loop for adding models here

       return _this;
   }

});

myCollection.on("add", function(toAdd) {
    console.log('added model', toAdd);
    console.log('updated collection', myCollection.toJSON());  
});


new SearchView({
   list : myCollection
});

</ p>

于 2012-09-12T06:01:53.467 に答える