1

私は次のコードを持っています:

App.Views.UseCategory = Backbone.View.extend({
  template: HandlebarsTemplates['uses/useCategory'],

  initialize: function() {
    _.bindAll(this, 'render', 'addCategory');
    this.render();
  },

  events: {
    'submit #addCategoryForm': 'addCategory'
  },

  render: function() {
    $(this.el).append(this.template(this.options));
    return this;
  },

  addCategory: function(event) {
    event.preventDefault();
    var self = this;
    var useCategoryId = $('select[id=use_category_id]').val();

    this.model.set('category_id', parseInt(useCategoryId,10));
    this.model.save({ success: console.log('success') });
  }
});

上記のコードが機能し、成功のコールバックがトリガーされるため、コンソールで「成功」を受け取ります。

しかし、なぜその addCategory 関数を次のように変更すると、

  addCategory: function(event) {
    event.preventDefault();
    var self = this;
    var useCategoryId = $('select[id=use_category_id]').val();

    this.model.set('category_id', parseInt(useCategoryId,10));
    console.log('save?');
    this.model.save({ success: this.addedCategory, error: function() { console.error(arguments) } });
  },

  addedCategory: function() {
    console.log('success');
  }

成功のコールバックがトリガーされなくなったのはなぜですか?

編集:

ここに画像の説明を入力

4

1 に答える 1

1

あなたがするとき:

this.model.save({ success: console.log('success') });

あなたはすでにコンソールログを呼び出しています。あなたがすべきことは(同じではありません):

this.model.save({ success: function() {
    console.log('success')
} });

違いを理解していますか、それとも説明が必要ですか?

実際、あなたのsuccessコールバックは決して呼び出されないと思います。

編集:

model.save(data, opts)2 つの引数を取ります。やったほうがいい:

this.model.save({}, { success: function() {
    console.log('success')
} });
于 2012-11-08T23:49:02.907 に答える