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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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 余烬:当子控制器同时观察父控制器触发请求的相同属性时_Javascript_Ember.js_Ember Cli - Fatal编程技术网

Javascript 余烬:当子控制器同时观察父控制器触发请求的相同属性时

Javascript 余烬:当子控制器同时观察父控制器触发请求的相同属性时,javascript,ember.js,ember-cli,Javascript,Ember.js,Ember Cli,我创建了一个具有两个子对象控制器和一个父数组控制器的应用程序。路线也以同样的方式描述 var-App=Ember.Application.create({ 日志转换:true }); App.Router.extend(函数(){ 此.resource('parent',function(){ 这条路线('child1'{ 路径:'/' }); 这条路线(“child2”); }); }); var parenterout=Ember.Route.extend({ 模型:函数(){ //从这里

我创建了一个具有两个子对象控制器和一个父数组控制器的应用程序。路线也以同样的方式描述

var-App=Ember.Application.create({
日志转换:true
});
App.Router.extend(函数(){
此.resource('parent',function(){
这条路线('child1'{
路径:'/'
});
这条路线(“child2”);
});
});
var parenterout=Ember.Route.extend({
模型:函数(){
//从这里得到了我的模型。
};
});
var Child1Route=Ember.Route.extend({
模型:函数(){
返回Ember.$.ajax('dummyUrl.com');
},
行动:{
refreshData:函数(){
var controller=this.controllerFor('parent.child1');
返回Ember.$.ajax('dummyUrl.com')。然后(函数(响应){
返回controller.send('updateModel'响应);
});
}
}
});
var ParentController=Ember.ArrayController.extend({
getFirstName:函数(){
返回这个.get('model').get('firstName');
},
getLastName:函数(){
返回这个.get('model').get('lastName');
}
});
var Child1Controller=Ember.ObjectController.extend({
需要:['ParentController'],
getName:function(){
返回此.get('controllers.ParentController.getFirstName')
},
updateName:函数(){
发送('refreshData');
}.obsers('controllers.ParentController.getLastName'),
行动:{
updateModel:函数(响应){
this.set('getName',response);
}
}
});
var Child2Controller=Ember.ObjectController.extend({
需要:['ParentController'],
getFirstName:Ember.computed.alias('controllers.ParentController.getFirstName'))
});

好的,所以您希望在不同的模板中更新属性。您需要尝试从管理对象(模型)的角度来考虑Ember,而不是这些对象的属性。使用Ember的绑定,属性应该自动更新。您需要研究如何使用来管理所述对象

ParentController
中,您实际上不需要任何东西。您可以直接在模板中使用来自
ParentRoute
的模型,例如

<div>
  {{input value=model.firstName}}
  {{input value=model.lastname}}
</div>
{{#link-to 'parent.child1'}}child1{{/link-to}}
{{#link-to 'parent.child2'}}child2{{/link-to}}
{{outlet}}
}))

您可以在模板中使用它们,如下所示:

<div>
  {{parentModel.firstName}}
</div>

{{parentModel.firstName}

您到底想完成什么?首先,当我在child1路径中时,我会根据父对象的getLastName属性中所做的更改尝试刷新或重新加载模型。在第二个示例中,我只是显示父对象的getFirstName属性。但当我从Child1路由移动到child2路由时,即使我在child2路由中,也会调用refreshData方法,这会抛出操作未处理错误,我相信这是为了在refreshData方法上设置观察者。我基本上不希望观察者在我处于不同的子路由时触发。我理解你的意思,但我需要在第一次更改父控制器属性的姓氏时,通过服务调用刷新并获取完全不同的数据小孩所以我想出了那个密码。因此,只有我在child1控制器的updateName方法上设置了观察器。但当我转到儿童2控制器时,我不希望出现这种情况。我知道,由于updateName方法上的Ember的observer标记,无论它是否是活动路由,它都会被触发,我想知道的是是否有其他方法来避免它,并在Ember中获得我想要的
<div>
  {{parentModel.firstName}}
</div>