Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ember.js(pre4)阵列控制器未保持状态_Javascript_Ember.js_Ember Router - Fatal编程技术网

Javascript Ember.js(pre4)阵列控制器未保持状态

Javascript Ember.js(pre4)阵列控制器未保持状态,javascript,ember.js,ember-router,Javascript,Ember.js,Ember Router,编辑2013-03-02 这似乎在RC1中得到了解决 在以前版本的Ember.js中,控制器将保持分配给它们的状态,但在Pre4中这似乎是一个问题 所以如果我有这个控制器 App.UsersController = Ember.ArrayController.extend({ content: ['mike', 'jen', 'sofia'], _content_observer: (function(){ /* I'm called, but my aut

编辑2013-03-02

这似乎在RC1中得到了解决


在以前版本的Ember.js中,控制器将保持分配给它们的状态,但在Pre4中这似乎是一个问题

所以如果我有这个控制器

App.UsersController = Ember.ArrayController.extend({
    content: ['mike', 'jen', 'sofia'],

    _content_observer: (function(){
         /* I'm called, but my author doesn't know why */
         console.log('Content was altered! But why? And by whom?');
    }).observes('content')
});
由于某些无法解释的原因,内容被覆盖。我不想使用余烬数据,但似乎我是被迫这样做的

这就是一个例子

发生什么事了?我该如何阻止它,或者这是如此深陷于余烬的自以为是之中,以至于我需要接受它并随波逐流


编辑

再进一步,无论设置为
模型
的是什么,似乎都将设置为
内容
值,即使您覆盖
设置控制器
挂钩

e、 g:

UsersController.content
将以值
['This'、'Shouldnt'、'Be'、'Assigned']结束


查看更新的

这并不是真正的余烬数据。新路由器自动设置控制器的内容属性。通过覆盖模型挂钩,自定义将用于路由的模型,而不是从控制器deinition中设置内容。例如:

App.UsersRoute = Ember.Route.extend({
    model: function() {
      return ['mike', 'jen', 'sofia', 'greta']
    }
}

我在这里修改了您的JSFIDLE:

您可以使用
setupController
方法来设置控制器的内容:

setupController:功能(控制器){
controller.set('content',[]);
}

编辑 您可以使用
model
方法返回原始内容:

模型:函数(){
var c=此.controllerFor(“用户”);
返回c.get('content');
}
这有点老套,但还是……)


参见

谢谢你的回答,你回答时我正在编辑。这个功能正是我想要避免的。我的实际用户项目的array controller是通过ajax加载其内容的,因此以这种方式设置模型在实践中是行不通的。我需要能够在观察者触发后通过ajax加载
内容
。问题是
模型
函数中的任何内容都是同步执行并存储在某处的,我没有办法更新或更改它。我在控制器上的观察者中尝试了
这个.set('model')
,但没有效果。似乎指南引起了一些混乱。当它说“您可以通过实现setupControllers钩子来更改此行为”时,这意味着您可以从那里自定义控制器的内容,但覆盖setupController并不阻止模型回调。此外,模型回调设计用于异步代码,您描述的用例(通过ajax查找)正是ember数据的工作方式。更新我的答案以提供更多指导。太好了!我期待着。我甚至不反对学习和使用余烬数据,但是没有关于定制适配器的文档。只是含糊其辞地提到这是可以做到的。很遗憾,restful适配器对我不起作用。谢谢你的回答。关键是
内容
根本不会被覆盖,也不会从路由设置内容。我认为
设置控制器
是初始化内容的地方-这就是ember的工作方式。
content
的初始值在某种程度上可以忽略不计。
setupController
在每次路由到该控制器时都会被调用,因此在这种情况下,每次访问控制器时都会重新初始化所有内容。这意味着您每次都需要进行ajax调用、处理响应并填充内容。。。这太荒谬了。在使用内容设置模型(从编辑中)时,我实际上已经尝试过了,但是当模型获取内容时,内容是空白的。ajax稍后加载并填充内容。然后,当用户导航到该内容时,该内容将被擦除。我认为余烬的方式是,每次访问该路由时,控制器都会重新初始化。这包括设置模型。如果您使用ember数据,它将使用缓存结果,从而保存ajax调用,但您仍然需要重新填充内容。幸运的是,ember会自动执行此操作。
App.UsersRoute = Ember.Route.extend({
    model: function() {
      return ['mike', 'jen', 'sofia', 'greta']
    }
}