3

サーバーにデータを送信する単純なアプリケーションがあります。

this.model.save(null, {success: dataSentOK});

次に、server@ からデータを削除します。

Backbone.sync("delete", data, {success: dataSentOK});

どちらの方法もサーバーに対して機能します (データの追加と削除)。

ただし、2 番目のメソッド ではBackbone.sync(...)、成功のコールバックは呼び出されません。

誰が私が間違っているのか教えてもらえますか? 私はBackbone.jsのソースコードを見て、明示的な関数呼び出しを試みました:

{success: function(){
    console.log("Done");
}}

そして、さまざまな形式のパラメーター:

{success: function(data, textStatus, jqXHR){
    console.log("Done");
}}

そして、成功関数を呼び出すものは何もありません。

助けてください。

ありがとうアダム

4

2 に答える 2

2

これを行うためのより良い方法は、十分に確立された強力な JavaScript イベントに従うことです。バックボーンは、かなり重要な 4 つのイベントsync( 、errordestroyおよび) を発生させinvalidます。

sync同期操作が成功したときに発生します。 error同期操作が失敗したときに発生します。 invalid検証が失敗したときに起動されます(適切な場所にある場合)。 destroyモデルを破棄すると発生します。

したがって、気になる特定のモデルのこのイベントに個人的にバインドします。すべての場合は、モデル定義でバインドします。私の目的のために、イベントにバインドするものはコンテキストに基づいて変化するため、ビュー内でモデルごとにバインドします。

例:

var MyModel = Backbone.Model.extend({
  // your model definition.
});

var MyView = Backbone.View.extend({
  // your view definition
  initialize : function() {
    this.model.on('sync', this.onSync);
    this.model.on('error', this.onError);
    this.model.on('destroy', this.onDestroy);
  },
  this.onSync : function(model, errors, options) {
    // your code
  },
  this.onError : function(model, errors, options) {
    // your code
  },
  this.onDestroy : function(model, errors, options) {
    // your code
  }
});
于 2013-03-23T22:08:05.917 に答える
0

Backbone.js は、内部でJQuery.ajax(...). そこで、JQuery を直接使用して、Backbone.js 通信の問題を解決しました。

Backbone は、CRUD モデル オブジェクトに使用されるモデルとトランスポート プロトコルの間でアーキテクチャを緊密に結合することを選択したため、完全に優れた機能的な API を独自のコードにラップすることで、価値を付加していると考えています。

Model オブジェクトには URL 属性が必要です。これは、モデルのsend(), fetch() etc機能をネットワーク通信に使用する必要があることを意味します。つまり、インターンは、モデルを単なる DTO にしたい場合、Backbone.js を使用できないことを意味します。また、JQuery を直接使用する場合は、MVC アーキテクチャをまったく使用しない方がよいことも意味します。

モデル オブジェクトに URL をアタッチするという意味は、すべての CRUD 操作に同じ URL を使用する必要があることも意味します。特にRESTサービスを使用している場合、これは意味がありません。

優れたアーキテクチャはモジュール化され、懸念事項の分離の原則に従います。Backbone.js がこれを行わないのは残念です。なぜなら、Backbone.js は、それほど緊密に結合されておらず、最も単純なタスクに使用するのが困難でなければ有望なフレームワークだからです。

于 2013-03-05T15:11:16.603 に答える