2015-07-03 36 views
0

我刚开始使用ember并试图做一个简单的测试。 其中,也很简单,让我卡住了一些原因,我无法找到答案的任何地方。在不改变路线的情况下从动作函数中加载/重新加载数据

所以我需要从服务器加载数据而不转换到另一条路由,并从submit动作(或针对该事件的任何其他动作)内执行此操作。

我有一个简单的输入表单,我手动输入一个对象ID和 我希望它被加载,正好在下面。够简单。接缝是角度三分钟的工作。在这里,我只是无法获得路由和控制器之间的沟通。

所以给这个小徽

form submit="submit" 
    = input type="text" value=oid 
    button type="submit" Submit 
#display 
    = person 

而且这条路

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model: { 
     person: null 
    }, 
    actions: { 
    submit: function() { 
    var oid = this.controllerFor('application').get('oid'); 
    var person = this.store.find('person', oid); 
    this.modelFor('application').set('person', person); 
    } 
} 
}); 

这是据我能想到。我想单击一个对象的ID提交,我希望该对象加载并显示在div#显示。

那么我做错了什么?什么是正确的做法?

首先,我甚至不知道把这种行为放在哪里?控制器或路由? 如果我把它放在控制器中,我不知道如何刷新模型。如果我把它放在路线上,我坚持以上。如果操作被放置在控制器中,看看如何去做也会很好。

为简单起见我只是做这一切在申请航线,模板,控制器...

谢谢

回答

0

给它响应UI把你的代码的最佳位置是在控制器,所以这样做在你的控制器上代码要简单得多。

在这jsfiddle我已经把一些虚拟代码,试图做你想做的事情。

//Index Route 
App.IndexRoute = Ember.Route.extend({ 
    model: function() { 
    return ['red', 'yellow', 'blue']; 
    } 
}); 

//Here my dummy controller. 
App.IndexController = Ember.Controller.extend({ 
    oid: 1, 
    actions: { 
     submitAction() { 
     //Here your logic to find record given the input and attach 
     //the response to the model object as UI is binding to model 
     //if you add/remove new records they will show up. 
     //On this example I have added a new object. 
     this.get('model').addObject('green'); 
     } 
    } 
}) 

Enjoy!

相关问题