簡體   English   中英

如何從ember.js中的ArrayController影響ObjectController的狀態

[英]How to affect state of ObjectController from its ArrayController in ember.js

我仍在嘗試了解如何正確構造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>

在模型上設置屬性。

您不必在模型上將屬性定義為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);
      },
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM