0

我仍在尝试了解如何正确构建 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>
4

1 回答 1

1

在模型上设置属性。

您不必将属性定义为模型上的属性(这意味着它不会在保存等时将其发送到服务器),但您可以在模型上设置属性。

或者你可以根据模型的 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);
      },
    }
});
于 2013-11-08T22:53:25.997 回答