2016-05-14 5 views
0

私はModel.syncの逆の直感的な動作と興味があります。バックボーンModel.syncプロキシはなぜ第2パラメータ(モデル)は義務的です

syncの2番目の引数はモデルで、Backbone.syncの場合は意味があります。しかし、プロキシとして動作するとき:

var MyModel = Backbone.Model.extend({baseUrl}) 
var myModel = new MyModel({id}) 
console.log(myModel.url()) // will issue baseUrl + id path 
myModel.sync(method, myModel) 

これは、同期を呼び出す同じモデルを渡す余分なビットです。

backbone.js:1907 Uncaught Error: A "url" property or function must be specified

をそして、これは設計上で行われる:

場合、あなたはそれが非常に非友好的なエラーがポップアップ表示されます渡しません。ドキュメントをよく見ているときには、第2パラメータが必須であることを明確に述べています。

私はそれを少しフレキシブルにしない理由を理解しようとしており、このモデルをライブラリレベルで渡して自分で作っていますか?このような

何か、私は最大だものを実証するための非常に愚かな例:

// Proxy `Backbone.sync` by default -- but override this if you need 
// custom syncing semantics for *this* particular model. 
sync: function() { 
    var args = arguments.splice(2, 0, this); // << make second attribute correspond to the this model 
    return Backbone.sync.apply(this, args); 
}, 

明確化:

Model.sync上のドキュメントは、私の中のSO

sync model.sync(method, model, [options]) Uses Backbone.sync to persist the state of a model to the server. Can be overridden for custom behavior.

を語ります私は、次の手順で 'patch'メソッドを使用してモデルを同期しようとしています:

a。データでモデルを更新する
b。 (:保護またはより良い)、プログラマはfetch()save()destroy()を使用したいsync()方法は、民間の一種である同期方法

this.model.set(data) 
this.model.sync('patch', this.model) 
+0

あなたが実際に知りたいことは私には不明です。どうか明らかにしてください。 'sync()'はモデルインスタンスの外部で使用するためのものではなく、実際にはプライベートで、 'fetch()'、 'save()'、 'destroy()'のみで使用されます。おそらく1つのニッチ・ユース・ケースがあり、それは外部で使用する必要があります。 –

+0

@ try-catch-finally-finallyが明らかになり、またあなたは質問に答えました。これがモデルの外で使われることを意図していないのであれば、なぜドキュメンテーション上にパブリックAPIとして掲載されているのですか? – dmi3y

答えて

1

でこのデータを同期します。

しかし、sync()は厳密に「作成」(作成、読み取り、更新の削除)の方法を定義しています。 AJAXが使用され、要求がどのように行われ、解析されるかは、プログラマがその動作を変更できるようにする方法を提供しなければなりません。これは、彼らが

sync model.sync(method, model, [options]) Uses Backbone.sync to persist the state of a model to the server. Can be overridden for custom behavior.

を言うとき、彼らは何を意味するかであり、そのバックボーンに起因するすべてのパブリックメソッドは、一つのデータソース、モデルを渡すことができるようにsync()ためのいくつかのインタフェースを定義する必要があります。


save()はオプションpatch: trueがかかるために、適切なパッチ方法があるかもしれないことに注意してください。 See the source in line 645

var method = this.isNew() ? 'create' : (options.patch ? 'patch' : 'update'); 
+0

ありがとう、私は今追求しているものです。と非常に良い説明した。 – dmi3y

関連する問題