在emberjs中将数据从控制器传递到模型

时间:2016-09-21 14:20:01

标签: ember.js

我有一个控制器,我从hbs获取值,它向我发送选定的国家/地区值。我需要在模型中选择这个所选国家来计算并将一些结果返回给hbs。如何在控制器中设置此值并将其放入模型中,以便我可以使用该值进行计算?

2 个答案:

答案 0 :(得分:0)

嗯,可能有一些不同的方法来实现这一目标。但是,我会举一些有希望帮助你的例子。

 //Controller.js
notes: Ember.computed('model.notes.[]', 'model.notes.@each.date', function() {
   return this.get('model.notes').sortBy('date').reverse();  //This is an example of Computed function which in this case it's sorting notes based on date. 
}),
 blink: null,
  actions: {
    taskChangeColor: function() {
      this.set('blink', 'blinker'); // this is another example that set new data by action which can be retrive from model and set to property 
    }
  }

或者你可以做的另一件事就是在Model本身中使用Computed函数,比如

 // model.js which is using ember-data and moment
  timeZone: DS.attr(),  //for example one property coming from server
  utcOffsetFormat: Ember.computed(function() {
    let time = moment.tz(this.get('timeZone')).format('hh:mm a');
    return time;
   // using a computed function to instantiate another value based on existing model property which means you can simpley use this property instead of direct one.
  })

此外,您仍然有资格在Route.js中使用操作而不是控制器,例如:

 //route.js
 actions: {
    changeSave: function(step) {
      var something = {
        contact: this.currentModel,
      };
      this.currentModel.set('step', something.contact);
      this.currentModel.save().then(d => {
       // set your alert or whatever for success promise
        return d;
      }).catch(e => {
        console.log(error(e.message));
        return e;
      });
    },

在上面的示例中,您可以看到我已经设置了一个动作来保存模型中的注释,这可以轻松地将()设置为具有完全相同属性名称的模型,如果这样做,您将立即在视图中返回结果。

希望它可以帮助你。我建议您阅读Ember-Docs

答案 1 :(得分:0)

我想说,根据您的要求,您不需要selectedCountryValue的控制器属性。您可以将此值保留在模型中。

在途中,

setupController(model,transition){
   this._super(...arguments); //this will set model property in controller.
   Ember.set(model,'selectedCountryValue','US'); //you can set default value
}

和内部控制器,您创建依赖于model.selectedCountryValue的计算属性。并计算一些结果

result:Ember.Computed('model.selectedCountryValue',function(){
//compute something return the result
}

在模板中,您可以直接使用{{model.selectedCountryValue}}