2012-11-30 44 views
2

编辑:问题出在我自己的本地设置以及我在应用程序中包含视图的方式。一旦我解决了这些问题,问题就解决了。这里的代码实际上是正确的。 Chrixian提供的答案也适用。访问{{#each}}迭代器中创建的子视图的属性

我坚持的东西,似乎相当简单。我想访问一些计算出来的属性,这些属性是在视图中的每个循环中构建的。

<div class='build-buttons-wrapper'> 
    <button class="list-builds-button" {{action "toggleBuildsList" target="view"}} ></button> 
    <button class="build-button" {{action "buildApp" on="click" target="view"}} >Build</button> 
</div> 
<div class='builds-list'> 
    <h2 class="build-title">Latest builds</h2> 
    <ul class="builds-list"> 
    {{#each content}} 
    {{#view Jimux.BuildView buildBinding="this"}} 
     <span class="build-date">{{createdAt}}</span> 
     <a {{bindAttr href="srcArchive"}} class="download-button source">Source</a> 

     {{! *here are different ways I have tried to access "finished" property* }} 
     {{log build.view.finished}} 
     {{log view.finished}} 
     {{log finished}} 
     {{log this.finished}} 
     {{log build.finished}} 

     {{#if build.finished}} 
     <div class="build-progressbar"></div> 
     {{else}} 
     <div class="build-progressbar"><div class="build-percent" style="width:{{unbound percent}}%"></div></div> 
     {{/if}} 
    {{/view}} 
    {{/each}} 
    </ul> 
</div> 

这里是一个正在使用该模板的BuildsView

Jimux.BuildsView = Em.View.extend({ 
    templateName: 'builds' 
    listVisible: false 
    classNames: ['builds-view'] 
    buildApp: (view, event, ctx) -> 
    @get('controller').newBuild() 
    , 
    hideList: -> 
    @set 'listVisible', false 
    this.$(".builds-list").hide("slide", {direction: "up"}, 300) 
    , 
    showList: -> 
    @set 'listVisible', true 
    this.$(".builds-list").show("slide", {direction: "up"}, 300) 
    , 
    toggleBuildsList: (view, event, ctx) -> 
    if @get 'listVisible' then @hideList() else @showList() 
    , 
    didInsertElement: -> 
    @hideList() if not @get 'listVisible' 

}) 

这里是它的{{#each}} iterator中的模板创建上述BuildView

Jimux.BuildView = Ember.View.extend(
    tagName: 'div', 
    classNames: ['build-item'], 
    #testBinding: true, 
    sample: true, 
    finished: (-> 
    return true 
    #return (@get 'percent') == 100 
).property('percent') 
) 

以上所有内容均按预期工作。例如,我可以使用{{percent}}访问每个子视图的百分比属性。但是,如果我定义我自己的Jimux.BuildView内部性能如上图,我似乎无法找到一个方法来车把内访问它们{{#each}}迭代器。你可以看到不同的方法我都试过车把代码里面有{{log}}声明,所有在控制台打印undefined。我在这里错过了什么?

+0

什么版本/ emberjs你运行? – jonnii

+0

@jonnii'Handlebars.VERSION =“1.0.rc.1”;'你认为有事情做这个问题? – Aras

回答

4

我假设percent属性,你指的是你在循环over--每个“内容”对象的属性,如果这就是使成品外观像这样的情况:

finished: (-> 
    return @get('context.percent') is 100 
).property('context.percent') 

你应该能够简单地使用{{finished}}{{#view Jimux.BuildView}} .. {{/view}}块内把手的

+0

+1阅读我的长篇文章,并感谢您的回应!我应该在哪里放置完成的计算属性?在BlocksView中有模板或在模板内部实例化的BlockView或其他位置? – Aras

+0

确定,很难承认,但它是我的一个愚蠢的错误。我的原始代码是正确的。您的代码也按预期工作。感谢您花时间回答并为虚惊而难过! – Aras

相关问题