#javascript #ember.js
#javascript #ember.js
Вопрос:
Я использую Ember 1.13.0 и пытаюсь обновить свойство, исходящее из параметров запроса в дочернем компоненте.
В дочернем компоненте js, когда «время» не определено, я устанавливаю его равным 1200. Если я регистрирую значение «time» (this.get(‘time’)) в дочернем компоненте, после его обновления я вижу, что его значение обновляется. Но он не переходит к действию родительского компонента.
Итак, почему я не могу получить его значение в родительском, если оно обновляется в дочернем?
Компонент верхнего уровня:
{{parent-component time = model.params.incomingTime}}
Родительский компонент:
<div>hello</hello>
{{child-component time=time}}
Родительский компонент JS:
actions: {
submit:function(){
var t = this.get('time')
}
}
Дочерний компонент:
<div>Time is {{currentTime}}</div>
Дочерний компонент JS:
currentTime: function(){
if(this.get('time')){
return time;
} else {
this.set('time','1200');
return '1200'
}
}.property()
Маршрут верхнего уровня:
var route = Ember.Route.extend({
queryParams: {
time: {refreshModel:true, replace: false}
},
model: function(params){
return Ember.RSVP.hash({ params: params})
},
setupController: function(controller, model) {
controller.set('model', model);
}
})
Комментарии:
1. покажите нам перехват модели маршрута?
2. Добавлен хук.
Ответ №1:
Будет incomingTime
ли введено свойство, params
если ваш код будет работать. иначе произойдет сбой.
{{parent-component time=model.params.incomingTime}}
Update1:
отправка всего model.params
может сработать.
Компонент верхнего уровня:
{{parent-component modelParams=model.params}}
Родительский компонент:
<div>hello</hello>
{{child-component modelParams=modelParams}}
Родительский компонент JS:
actions: {
submit:function(){
var t = this.get('modelParams.time')
}
}
Дочерний компонент:
<div>Time is {{currentTime}}</div>
Дочерний компонент JS:
currentTime: function(){
if(this.get('modelParams.time')){
return time;
} else {
this.set('modelParams.time','1200');
return '1200'
}
}.property()
Комментарии:
1. Ну, если есть значение, я просто возвращаю его в дочерний компонент, в противном случае мне нужно только установить время, и именно здесь я не могу получить к нему доступ в родительском компоненте
2. если
model.params.incomingTime
свойство равноundefined
, то ember не может распространить изменения вашего дочернего компонента на родительский компонент. поэтому я рекомендую вам использовать значение по умолчанию дляmodel.params.incomingTime
. в противном случае переместите логику defaultValue во внутренний модельный хук или в соответствующий контроллер.3. или же вы можете отправить его
model.params
и использоватьthis.get('model.params.time')
для получения свойства, а для установки вы можете сказатьthis.set('model.params.time','value')
4. Ну, я немного неохотно отправляю все параметры вниз. Зачем это нужно. Вы знаете, я обновил Ember 1.11 до 1.13. И я столкнулся с этой проблемой. Существующий код работал с 1.11, но не с 1.13. Может быть, я думал, вероятно, определить время на родительском уровне и передать его вниз. Но я не уверен, есть ли необходимость передавать целые параметры.
5. Я заставил его работать, объявив новый CP в родительском компоненте и вернув просто «время» из этого. Теперь я передаю этот CP дочернему компоненту, а затем обновляю его с помощью действия в родительском компоненте. Похоже, это работает.
Ответ №2:
Я заставил его работать, объявив новый CP в родительском компоненте и вернув просто «время» из этого. Теперь я передаю этот CP дочернему компоненту, а затем обновляю его с помощью действия в родительском компоненте. Таким образом, кажется, что это работает