Sproutcore 2.0 一对多关系

标签 sproutcore sproutcore-2

我一直在努力使用 Sproutcore 2.0 为一对多关系获取正确的绑定(bind)。

我的模板如下所示:

<script type="text/x-handlebars">
  {{#collection contentBinding="HTH.projectsController.content"}}
    <h3>{{content.title}}</h3>
    {{#collection contentBinding="content.tasks"}}
    <span>{{content.title}}</span>
    {{/collection}}
  {{/collection}}
</script>

虽然实际代码如下所示:
HTH.Project = SC.Record.extend({
  title: SC.Record.attr(String),
  tasks: SC.Record.toMany('HTH.Task',{
    isMaster: YES,
    inverse: 'project'
  })
});

HTH.Task = SC.Record.extend({
  title: SC.Record.attr(String),
  project: SC.Record.toOne('HTH.Project', {
    isMaster: NO
  })
});

HTH.Project.FIXTURES = [ { guid: 1, title: 'Send man to moon', tasks: [1,2]}, 
                         { guid: 2, title: 'Master handstand', tasks: [3]}];
HTH.Task.FIXTURES    = [ { guid: 1, title: 'Find rocket',    project: 1}, 
                         { guid: 2, title: 'Find fuel',      project: 1},
                         { guid: 3, title: 'Stand on hands', project: 2}];

HTH.store = SC.Store.create().from(SC.Record.fixtures);

// Controllers

HTH.projectsController = SC.ArrayProxy.create({
  content: HTH.store.find(HTH.Project)
});

现在我可以更新任务,这些将更新 UI。例如:
HTH.store.find(HTH.Project).get('firstObject').set('title','Updated the title!');

但是,如果我创建一个新项目并动态添加一个任务,UI 将添加新项目,但从不添加任何优惠:
var project = HTH.store.createRecord(HTH.Project, {title: "New" });
var task = HTH.store.createRecord(HTH.Task, {title: "New task" });
project.get('tasks').pushObject(task);

我确定这是由于绑定(bind)没有按预期工作,或者是需要观察的属性。任何人都可以帮忙吗?

注意 : 这个问题是在 SproutCore 2.0 成为 Ember.js 之前提出的。它还引用了 SproutCore 1.x 数据存储的非官方端口,该端口已被官方支持的 ember-data 库取代。

最佳答案

为了使记录可用,它需要是 assigned an ID .

这意味着:

var project = HTH.store.createRecord(HTH.Project, {title: "New" });
var task = HTH.store.createRecord(HTH.Task, {title: "New task" });
project.get('tasks').pushObject(task);

变成:
var project = HTH.store.createRecord(HTH.Project, {title: "New" }, 123);
var task = HTH.store.createRecord(HTH.Task, {title: "New task" }, 321);
project.get('tasks').pushObject(task);

然后更改将反射(reflect)在 UI 中

关于Sproutcore 2.0 一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7988526/

相关文章:

javascript - @scope 在 sproutcore 中的含义

javascript - 递归集合在 sproutcore2 中是否可行?

javascript - 如何在运行时在knockoutjs对象中添加新的计算属性?

model-view-controller - 如何在sproutcore中实现多态性?

sproutcore - 无法安装SproutCore

Ember.js 动态 subview

javascript - 如何将单个JSON文件加载到SproutCore模型中?

javascript - 如何等待 Sproutcore 2.0 加载所有模板?

jquery - 用于 jQueryUI 的 SproutCore Ace

rubygems - Sproutcore安装-找不到RubyGem