1

バックボーンで標準の Rails スタックを使用しています。ここのチュートリアルに従ってください: http://www.jamesyu.org/2011/01/27/cloudedit-a-backbone-js-tutorial-by-example/次のコードを取得しました:

Models.Users = Backbone.Model.extend({
  url: function() {
    var base = '/users'
    if (this.isNew()) return base + '.json';
    else return base + (base.charAt(base.length - 1) == '/' ? '' : '/') + this.id;
  }
});

このコードはうまく機能します。

ただし、新しいモデルを作成するときは常に、まったく同じ 2 行のコードをコピーして貼り付けています。

    if (this.isNew()) return base + '.json';
    else return base + (base.charAt(base.length - 1) == '/' ? '' : '/') + this.id;

コードで変更するのは基本変数だけです。

それは非常に間違っているようです。これをより良くする方法はありますか?Rails で動作するように、Backbone の URL をこのように変更する必要はありませんか? 同じコード行を何度もコピーして貼り付ける必要がないように、より良い方法はありますか?

4

1 に答える 1

2

ただし、新しいモデルを作成するときは常に、まったく同じ 2 行のコードをコピーして貼り付けています。

どう言う意味ですか?同じモデルをインスタンス化しているのに、なぜそれを行う必要があるのでしょうか? ただし、新しい (別の) モデルを作成することを意味するかどうかは明確ではありません。あなたがそうしているなら、いわばモデルの基本クラスにこのコードを投げることができます:

var MyModel = Backbone.Model.extend({
 url: function(base){
  if(base)
   //... do something

  else
   //... do something else
 }

その後、MyModel から他のモデルを直接継承できます。

var AnotherModel = MyModel.extend({...});

あなたの質問を正しく理解していれば、このようなことが問題を解決するはずです。base の存在を確認するだけで、バックボーンurl()がパラメーターなしでクエリを実行したときに有効な値を返すことができます。モデルのメソッドにbaseオプションとして渡すことで、これらの es を初期化できます。initialize

継承でない場合は、url上記と同様のメソッドを作成し、parameterfor every モデルに渡すだけです。

混乱が何であるかはよくわかりませんが、私見ではこれらの両方が機能するはずです:)

于 2012-09-18T04:31:45.837 に答える