我仍在尝试了解如何正确构建ember.js应用程序。所以,这可能是我试图解决这个问题的一个系统性问题。话虽这么说,我会尝试用不同的方式提出同样的问题......
在下面的代码示例中,创建记录时,如何将isEditing属性设置为true将其添加到列表中?
我可以从其阵列控制器访问特定的对象控制器吗?
每个任务都有一个视图状态和一个编辑状态。创建新任务时,如何让它最初出现在编辑状态?
App.TasksController = Ember.ArrayController.extend({
actions: {
createTask: function(){
var task = this.store.createRecord('task');
task.save();
}
}
});
App.TaskController = Ember.ObjectController.extend({
isEditing: false,
actions: {
toggleEditing: function(task) {
if(this.isEditing){
task.save();
}
this.set('isEditing', ! this.isEditing );
}
}
});
<script type="text/x-handlebars" data-template-name="tasks">
<ul>
{{#each task in controller}}
{{render "task" task}}
{{/each}}
<li {{action "createTask"}} >
New Task
</li>
</ul>
</script>
<script type="text/x-handlebars" data-template-name="task">
<li {{action "toggleEditing" task on="doubleClick"}} >
{{#if isEditing }}
{{textarea value=title cols="80" rows="6"}}
{{else}}
{{title}}
{{/if}}
</li>
</script>
答案 0 :(得分:1)
在模型上设置属性。
您不必将属性定义为模型上的attr(这意味着它不会在保存时将其发送到服务器等),但您可以在模型上设置属性。
或者您可以根据模型的currentState进行操作。 (点击转到订单,然后添加订单)
http://emberjs.jsbin.com/AvOYIwE/4/edit
App.OrderController = Em.ObjectController.extend({
_editing: false,
editing: function(){
return this.get('_editing') || (this.get('model.currentState.stateName') == 'root.loaded.created.uncommitted');
}.property('model.currentState.stateName', '_editing'),
actions: {
stopEditing: function(){
// blow away the computed property and just set it to true
this.set('editing', false);
},
startEditing: function(){
this.set('editing', true);
},
}
});