2

Backbone.js を使用して、モデルのメソッド内からモデル プロパティを設定したいと考えています。これは単純なはずですが、機能させることができません。

現在、私が持っているのはこれです。「performSearch」の呼び出し中に「results」プロパティを設定しようとしています:

var SearchModel = Backbone.Model.extend({
    performSearch: function(str) {
      $.get('/' + str, function(results) {
        console.log(data);
        this.set("results", data);
      });
    },
});

これにより、次のエラーが表示されます。

Uncaught TypeError: Object #<Object> has no method 'set' 

私は何を間違っていますか?

4

1 に答える 1

5

問題はthis、ajax コールバックでモデル オブジェクトにバインドされていないことです。

次のようにして修正できます。

var SearchModel = Backbone.Model.extend({
    performSearch: function(str) {
        //assign to local variable, so that it is accesible in callback's closure
        var self = this; 
        $.get('/' + str, function(results) {
            // are you sure it should be data?
            console.log(data);
            self.set("results", data);
        });
    },
});

これを行う別の方法は、コールバック関数をモデルに明示的にバインドすることです。

   var SearchModel = Backbone.Model.extend({
    performSearch: function(str) {
        //assign to local variable, so that it is accesible in callback's closure
        $.get('/' + str, (function(results) {
            // are you sure it should be data?
            console.log(data);
            this.set("results", data);
        }).bind(this)); //binding here
    },
});
于 2013-01-08T19:51:07.737 に答える