EmberJS在#each中调用控制器功能

时间:2014-08-02 13:53:17

标签: ember.js

我试图在#each模板中调用控制器函数来检查模型是否被选中。这需要为每个循环迭代接收模型。

jsbin在这里http://emberjs.jsbin.com/bemos/4/edit

我尝试使用以下模板,但是向{{controller.selected}}添加参数会导致ember抛出异常,或者没有做任何事情(结果在jsbin中似乎有所不同)。

{{#each model}}
    <li><a hres="#" {{action "clickItem" this}}>{{label}} -- selected is {{controller.selected name}} </a></li>
{{/each}}

我在控制器中的功能如下

selected: function(id) {
    var list = this.get("selectedList");
    console.log("Checking sel for", id);
    if(list.contains(id))
        return true;
    return false;
}.property("selectedList")

在jsbin中,我希望能够点击&#34; Hello 1&#34; /&#34; Hello 2&#34;元素,这应该改变文本的部分说&#34;选择是假&#34;为真。它还应该更新底部选择的项目数。目前,这显示选择了1个项目(因为默认是selectedList:[&#34; 2&#34;])然而&#34; Hello 2&#34;说&#34;选择是假的&#34; - 这应该说&#34; true&#34;。

(我应该加上我对EmberJS很新,因为他们已经使用ExtJS几年了!)。 感谢

1 个答案:

答案 0 :(得分:1)

你的代码真的有问题吗?我想不,因为你的垃圾箱工作正常,甚至clickItem也正常工作。在您遇到此问题的本地环境中,我认为您没有使用相同版本的把手和余烬。请检查您是否在下面使用,

  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
  <script src="http://builds.handlebarsjs.com.s3.amazonaws.com/handlebars-v1.3.0.js"></script>
  <script src="http://builds.emberjs.com/tags/v1.6.1/ember.js"></script>

更新1 -

以下是我尝试更新的垃圾箱 - http://emberjs.jsbin.com/veqoqocu/1/edit 它没有完全发挥作用,但修复了一些问题。

存在多个问题,

  1. 您应该使用ArrayController作为列表,重新设计您的示例,否则所选属性将永远不会以您想要的方式工作。这是一个很好的例子 - http://emberjs.com/guides/controllers/representing-multiple-models-with-arraycontroller/
  2. 推&amp; pop需要是pushObject和popObject
  3. 数组上的计算机属性就像 - } .property('selectedList。[]')