2013-07-23 2 views
1

В моем приложении у меня есть следующие rawNodes свойство, которое я использую в качестве приложения в масштабах всей кэш:Как вручную обновить ArrayController

var App = Ember.Application.createWithMixins({ 
    ... 
    /** 
     The rawNodes property is a nodes deposit to be used 
     to populate combo boxes etc. 

    **/ 
    rawNodes: null, 

    getNodes: function() { 
     if (!this.rawNodes) { 
      this.rawNodes = this.Node.find(); 
     } 
    }, 
    ... 
}); 

В некоторых из моих контроллеров я модифицирующих данные, которые также должны быть обновлен в этом общем кэше. Я хотел бы реализовать пару функций, обновить данный узел и удалить данный узел. Что-то вроде:

updateNode: function(node_id, node) { 
    this.rawNodes.update(node_id, node); 
}, 

deleteNode: function(node_id) { 
    this.rawNodes.delete(node_id); 
} 

Но я не знаю, как работать с ArrayController, даже если эти операции вообще возможно. Я не вижу примеров такого рода процедур в ArrayController documentation. Может ли кто-нибудь предложить пример или указать мне в правильном направлении?

ответ

1

Вместо того чтобы использовать rawNodes собственность, я думаю, что это могло бы быть более полезным для поддерживать Node модель и NodesController. Назначьте свойство model с setupController, чтобы вы могли быть уверены, что узлы всегда выбираются.

Поскольку это кеш приложения, используйте needs в ApplicationController, чтобы он мог делегировать его методы.

App.ApplicationRoute = Em.Route.extend({ 
    setupController: function() { 
    this.controllerFor("nodes").set("model", App.Node.find()); 
    } 
}); 

App.ApplicationController = Em.Controller.extend({ 
    needs: "nodes", 
}); 

App.NodesController = Em.ArrayController.extend({ 
    getNodes: function() { 
    // ... 
    } 
}); 

App.NodeController = Em.ObjectController.extend({ 
    updateNode: function() { 
    // ... 
    }, 

    deleteNode: function() { 
    // ... 
    } 
}); 
+0

Это имеет смысл, но все же: как реализовать «updateNode» и «deleteNode»? – dangonfast

+0

Это хороший момент. Я думаю, что эти два метода должны идти в «NodeController» (ответ обновлен) для действий на одном ресурсе. С точки зрения фактического обновления и удаления, это зависит от модели. Например, если вы используете 'ember-data', вы хотите изменить свойство, а затем вызвать' node.store.commit() 'или' node.deleteRecord() '. Если ваша модель представляет собой простой «Ember.Object», вам придется самостоятельно реализовать методы, используя '$ .ajax' или все, что вам нужно использовать для вашего приложения. – veidt

Смежные вопросы