【问题标题】:with Ember Data, how do you call commit?使用 Ember Data,如何调用提交?
【发布时间】:2013-01-24 06:05:26
【问题描述】:

我正在尝试使用 ember 的所有最后路线和数据内容构建一个简单的待办事项列表。你可以找到我的完整 repo here

我的商店是这样设置的:

EmberTodo.Store = DS.Store.extend({
  revision: 11,
  adapter: DS.RESTAdapter.create({bulkCommit: false})
});

给我带来麻烦的代码行来自这里:

EmberTodo.CreateItemView = Ember.TextField.extend({
  insertNewline: function() {
    EmberTodo.Item.createRecord({description: this.get('value')});
    this.set("value", "");
  }
});

据我了解,调用createRecord 不会创建记录,而是我需要在某个地方调用commit()。但是,我无法弄清楚在哪里。有人有想法么?

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    据我了解,调用 createRecord 不会创建记录,而是我需要在某处调用 commit()。但是,我无法弄清楚在哪里。有人有什么想法吗?

    当然。以尽可能小的方式完成此工作

    EmberTodo.CreateItemView = Ember.TextField.extend({
      insertNewline: function() {
        item = EmberTodo.Item.createRecord({description: this.get('value')});
        item.get('transaction').commit();
        this.set("value", "");
      }
    });
    

    我在这里放置了一个使用 DS.FixtureAdapter 的简化工作示例:http://jsbin.com/ugipap/1/edit

    完成了,对吗?

    有点。事情是,你真的不想从一个视图中做这种事情。考虑重构以将此逻辑移动到控制器层,或者根据情况可能的路由器。

    【讨论】:

    • 感谢您的及时答复!这完全解决了它!但是出于好奇,将其冒泡到控制器中的最佳方法是什么?
    • @earnold 你有一个用于这个视图的控制器(可能是EmberTodo.ItemController),方法是createItem。然后,在您看来,请致电this.get('controller').createItem({description: this.get('value')})
    • 嗨@Mike,我有一个问题,在官方Ember TODO 示例中,他们使用model.save() 提交chagne,那么model.save()model.get('transaction').commit()controller.get('store').commit() 之间有什么区别?
    • controller.get('store').commit() 将提交控制器存储的默认事务。 model.get('transaction').commit() commit 是模型的事务。如果您只有一家商店并且没有创建交易,那么这些是同一回事。 model.save() 不会立即提交 - 而是安排模型在下一个运行循环中保存。因此,如果您在多个模型上调用 model.save(),它们都会被批处理到同一个提交中。在这里查看我的答案:stackoverflow.com/questions/17309934/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 2013-05-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多