2

我想我很难理解控制器加载的数据应该如何绑定并可供视图使用。出于这个问题的目的,我在 jsFiddle中制作了一个使用 ember-rest 加载数据的小示例。

正如您在 jsFiddle 中看到的,我想在此示例中实现的是将我的绑定testDataBlockView使用blocki模板呈现的对象。在 Ember 中执行此操作的适当方法是什么?

要了解小提琴正常运行时的外观,请将绑定替换blocksController为直接绑定到testData. 我在另一个版本的 jsFiddle中做到了这一点。

{{view App.BlockView blockiBinding="App.testData" }}

当然,这些块在这个版本中可以正确渲染——但这不是我想要这样做的方式。我想学习如何正确地(按照 Ember 的建议)连接blockController到视图并从中获取数据。在实际场景中,数据将从 REST API 获取,这就是我在此示例中使用 ember-rest 的原因。

如果你用你的忍者动作修复了那个 jsFiddle,请花几秒钟解释一下它是如何工作的。我发现很难获得有关这方面的最新信息。谢谢!

4

2 回答 2

4

您可以使用 a) 适当的命名方案 b) 连接出口,从而将视图与控制器连接起来

例如,如果你有一个视图 BlockView,你应该有一个控制器 BlockController。然后从视图中您可以直接访问控制器的内容。

App.BlockView = Ember.View.extend({
  templateName: 'block'
});

App.BlockController = Ember.ObjectController.extend({
  block: { name: 'block 1', children: [ {name: 'child1' }, {name: 'child2'}] }
});

<script type="text/x-handlebars" data-template-name="block" >
   <div>Block Name: {{block.name}}</div>
   {{#each child in block.children}}
     <div>Child Name: {{child.name}}</div>
   {{/each}}
</script>

在您的代码示例中,我还想念的是路由器。这个负责对所有组件进行适当的“粘合”。看看 Trek 教程中的路由器(顺便说一句,它是最新的,代表了应用程序的编写方式)。

在路由器中,您将定义 connectOutlets 方法,在该方法中加载应呈现到插座中的视图。如果你坚持上面的命名方案,你可以从你的视图直接访问控制器

更新

我让您的代码运行并进行了一些修改:

  • 您不需要自己启动控制器。App.initialize() 会为你解决这个问题
  • 我将资源控制器修改为对象控制器并删除了资源块,但当然这与 ObjectController 没有什么不同。只是为了基本了解使用普通的 ember.js 对象可以让您的生活更轻松。
  • 它在 JavaScript 中而不是 Coffee Script 中 - 抱歉 :D

不幸的是,我无法创建一个 jsFiddle(不要问为什么 - 没有线索 :))。所以我已将数据添加到 GIST - https://gist.github.com/3832764

更新 2

而且我现在还设法创建了一个 JSFiddle http://jsfiddle.net/qV5wu/2/ :)

于 2012-10-03T09:54:51.050 回答
0

阅读http://trek.github.com/看看是否对您有帮助。从我所看到的小提琴中,您所拥有的示例与教程中提供的示例非常相似。

特别是我要看的区域是connectOutlet。

希望有帮助。

于 2012-10-03T06:05:46.517 回答