8

ID によってモデルをフェッチするための Backbone.js のデフォルトの RESTful アプローチは、簡単でわかりやすいものです。ただし、別の属性でモデルをフェッチする例が見つからないようです。別の属性で Backbone.js モデルを取得するにはどうすればよいですか?

var Widget = Backbone.Model.extend({
    urlRoot: '/widgets',
    fetchByName: function(){ ... }
});
var foowidget = new Widget({name: 'Foo'});
foowidget.fetchByName();
4

5 に答える 5

14

base modelfetch を呼び出すときに、定義またはオンデマンドでこのようなことを試すことができます。

model.fetch({ data: $.param({ someParam: 12345}) });

あなたの場合、の行に沿って。

var Widget = Backbone.Model.extend({
    initialize: function(options) {
        this.name = options.name;        
    },
    urlRoot: '/widgets',
    fetchByName: function(){ 
        this.fetch({ data: $.param({ name: this.name }) }) 
    }
});

var foowidget = new Widget({name: 'Foo'});
foowidget.fetchByName();
于 2013-01-28T07:38:58.100 に答える
3

1 つの方法は、Backbone.sync() メソッドをすべてのクラスまたは自分のクラスに対してオーバーライドすることです。ただし、おそらくあなたの目標は、単一のモデルのフェッチをオーバーライドすることです。これを行う 1 つの方法は、jQuery.ajax(...) を直接呼び出すことです。成功すると、応答を受け取り、それを設定します。

fetchByName: function() {
   var self = this;

    $.ajax({
      url: self.urlRoot+ "?name="+this.get('name'),
      type: 'GET',
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      success: function(data) {
          self.set(data);
      }
    });


}
于 2013-01-28T04:56:07.627 に答える
3

モデルがコレクションの一部である場合、where() を使用して、いくつかの基準に一致するモデルを引き出すことができます。

http://backbonejs.org/#Collection-whereを参照してください

于 2013-01-28T04:59:25.070 に答える
0

これは単純なモデルです。fetch は何らかの方法で $.ajax と同じです

model = Backbone.Model.extend({
    urlRoot: "/root/"
});

var Model = new model();

Model.fetch({
    beforeSend: function () {
        console.log("before");
    },
    data: {
        param1: "param1",
        param2: "param2"
    },
    success: function () {
        console.log("success");
    },
    error: function () {
        console.log("failure");
    }
});
于 2014-02-11T08:07:35.220 に答える