如何将模型传递给在Ember 1.6中从路径渲染的模板

时间:2014-06-08 21:58:53

标签: ember.js

我正在尝试在路线中的渲染模板中设置模型。通过模板调用正确捕获模型:

{{#each itemController="user"}}
  <div {{bind-attr class="isExpanded:expanded"}}>
  <div><button {{action "sayHello" this}}>{{first_name}} {{last_name}}</button></div>

和我的路线:

Newkonf.UsersRoute = Ember.Route.extend({
  isExpanded: false,

  actions: {
   sayHello: function(myModel){

      alert('first name: ' + myModel.first_name); // <- this works
      // this.render('edit-user', {model: myModel});  <- doesn't work but not sure since this leads me to susupec 
      // it might https://github.com/emberjs/ember.js/issues/1820
      // this.set('model', myModel}); <- doesn't work
      this.render('edit-user');
    }
  }
}
车把是:

going to edit user here first name: {{first_name}}

编辑1

是的,我可以更新UsersRoute中的消息,它会相应更新。我有点虽然因为我指定UserController它会导致UserRoute优先,但我猜不是。

这是我的路由器:

Newkonf.Router.map(function() {
  // this.resource('posts');

  this.route('about', { path: '/about'});
  this.resource('users', { path: '/users'}); 
});

thx任何帮助

编辑2

必须这样做我的modal.js.hbs:

within modal for you:
{{model.first_name}}

因为这不起作用:

within modal for you:
{{first_name}}

并且不确定原因。

这是我的路线

Newkonf.ApplicationRoute = Ember.Route.extend({

  actions:{
    somePlace: function(item){
     alert('here i am in somePlace: ' + item.last_name); // <- this works
     var modalController = this.controllerFor('modal');
     modalController.set('model', item);
     var myjt=modalController.get('model');  
     console.log('my value:' + myjt.first_name); // <- this works
     this.render('modal', {
       into: 'application',
       outlet: 'modal3',
       controller: modalController
      });
    }
  }
});

并且没有控制器

1 个答案:

答案 0 :(得分:2)

渲染到特定插座时,需要同时指定插座,并在尝试渲染时将插座显示在视野中。

对于模态,将它放在应用程序模板中通常是一个不错的选择,因为应用程序始终在视图中。

  actions: {
    openModal: function(item){
      var modalController = this.controllerFor('modal');
      modalController.set('model', item);
      this.render('modal', {  // template
        into: 'application',  // template the outlet lives in
        outlet: 'modal',      // the outlet's name
        controller: modalController  // the controller to use
      });
    }
  }


  App.ModalController = Em.ObjectController.extend();

在上面的情况中,我使用名为modalapplication)的插座将模板modal渲染到{{outlet 'modal'}},然后我创建了一个控制器来支持模板我正在渲染。在此过程中,我在控制器上设置了模型,该模型将在模板中使用。

您可以阅读有关模态的更多信息:http://emberjs.com/guides/cookbook/user_interface_and_interaction/using_modal_dialogs/

这是一个例子: http://emberjs.jsbin.com/pudegupo/1/edit