我在Emberjs相当新。我有以下情况:
App.Message = DS.Model.extend
value: DS.attr('string')
App.MessagesController = Ember.ArrayController.extend
isAvailable: null
isShowButton: (->
#I want to check a property of each obj in the template's each loop below
console.log @get('value') #but << this outputs `undefined`
if @get('value') == 'test' and isAvailable
return true
else
return false
).property('isAvailable', 'model.value')
在我的模板上:
{{#each controller}}
{{value}}
<!-- THE BUTTON ONLY SHOWS UP WHEN THE CONDITION ABOVE SATISFIES -->
{{#if controller.isShowButton}}
<input value='Test Button' type="submit">
{{/if}}
{{/each}}
路线:
App.MessagesRoute = Ember.Route.extend
setupController: (controller, model)->
controller.set('model', @store.find('message'))
我错过了什么?任何帮助将不胜感激。
答案 0 :(得分:1)
你需要迭代你的数组,值不存在于集合中,它存在于集合中的每个项目上,有一个很好的帮助,getEach
返回每个项目的值。它是这样使用的(赦免我的咖啡)
App.MessagesController = Ember.ArrayController.extend
isAvailable: null
isShowButton: (->
#I want to check a property of each obj in the template's each loop below
//console.log @get('value') #but << this outputs `undefined`
values = @getEach('value')
console.log values
outerValue = false
values.forEach(function(value){
if value == 'test' and isAvailable
outerValue = true
//else
// I'm not sure if they all have to be test
});
return outerValue
).property('isAvailable', 'model.@each.value')
你的路线应该真正使用模型钩
CcChat.MessagesRoute = Ember.Route.extend
model: (params)->
return @store.find('message')
如果您尝试为控制器中的每个项目创建计算属性,您将要使用itemController
,它指定用于数组中每个项目的控制器。
App.MessagesController = Ember.ArrayController.extend
itemController: 'foo'
isAvailable: null
App.FooController = Em.ObjectController.extend
needs: ['messages']
isShowButton: (->
return @get('value') === 'test' && @get('controllers.messages.isAvailable')
).property('controllers.messages.isAvailable', 'value')