1

私は見つけたjavascriptサンプルコードの背骨をたどっています。私はほぼまったく同じコードを持っているので、サンプルと現在のバージョンのスパインは少し異なっているようです。アップティックは、私の呼び出しがプロキシされていないことの1つです。

exports.UrlsList = Spine.Controller.create({
  elements: {
      ".items": "items",
      "form": "form",
      "input": "input"
  },
  events: {
    "submit form": "create"
  },

  proxied: ["render", "addAll", "addOne"],

  init: function(){
    Url.bind("create",  this.addOne);
    Url.bind("refresh", this.addAll);
  },

  addOne: function(url){
    var view = Urls.init({item: url});  // The is another controller
    this.items.append(view.render().el); //This is where the error occurs
  },

  addAll: function(){
    Url.each(this.addOne);
  },

  create: function(e){
    e.preventDefault();
    var value = this.input.val();

    if (value) {
      Url.create({content: value});
    }

    this.input.val("");
    this.input.focus();
  }
});

addOne関数が呼び出されると、現在のクラスではなく、URLのコンテキストで呼び出されます。addOneがプロキシリストに含まれていても、何もプロキシしていないようです。何か案は?

4

2 に答える 2

2

proxiedSpineは最近、アレイの使用法から離れました。

proxy代わりに、配列を削除して次の関数を使用できるはずです。

init: function(){
    Url.bind("create", this.proxy(this.addOne));
    Url.bind("refresh", this.proxy(this.addAll));
},

addAll: function(){
    Url.each(this.proxy(this.addOne));
},
于 2012-05-10T21:15:05.433 に答える
0

これが、私が最近CoffeeScriptを愛している理由です。太い矢印を使用して、同じ効果を得ることができるからです。

init: ->
    Url.bind("create", @addOne)

addOne: (item) =>
    # do your stuff with item in the context of the @ you would expect
于 2012-06-02T18:12:17.530 に答える