Emberjs如何更新路由中组件的属性?

时间:2017-01-22 23:54:57

标签: javascript ember.js

您好我想知道从路线更新组件属性的正确方法是什么?。

关于我想做什么的一点背景:

我有两个自定义按钮,我称之为CardButtons(基于材料设计)旁边一个名为description的空白区域,我想要的是创建一个悬停事件,触发ajax调用以从数据库中检索详细数据并渲染它在描述区域。

检查更新

到目前为止,我创建了一条这样的路线:

export default Ember.Route.extend({

selectedModule: '',

model: function () {

    return {
        selectedModule: 'employeeModule'
    };
},


actions: {

    showDescription: function (params) {

        this.set('model.selectedModule', params);

    }

}});

我的路线模板像这样调用我的组件:

<div class="row">  
   {{sis-db-description-render idTitle=model.selectedModule}}
</div>

并且组件定义如下:

export default Ember.Component.extend({

info: null,
ready: false,

didInsertElement: function () {

    this.queryData();


},

queryData: function (){
     /** Does an Ember.$.post request to the API  with the idTitle as param**/
}
});

第一次执行此操作时,它会完美地加载详细数据,但是当我尝试刷新数据时,事件不会触发第二次调用。我认为这是因为我没有以适当的方式更新模型。

有关如何更新组件属性的任何想法吗?

更新:

感谢@kumkanillam我能够在我的路线上找到一种方法,我添加了下一个代码:

 setupController: function (controller, model) {

    this._super(...arguments); //if its new/index.js route file then you can use controller argument this method.
    controller.set('selectedModule', 'employeeModule');
},


actions: {

    showDescription: function (params) {

        console.info(params);
        this.controllerFor('new.index').set('selectedModule', params);

    }

}

通过这样做,现在视图每次更新内容,我仍然不知道这是否是正确的方法,但现在可以使用。

1 个答案:

答案 0 :(得分:0)

在下面的代码中,未在路径中定义模型。它通过setupController hook在相应的控制器中定义。

showDescription: function (params) {
  this.set('model.selectedModule', params);
}

因此,您可以在控制器中定义操作并更新model.selectedModule 如果你想在路线上做,

showDescription: function (params) {
      let cont = this.controllerFor('route-name');
      cont.set('model.selectedModule', params);
    }