我想知道是否可以在emberViews之间进行交互?
使用控制器我有类似这样的设置。
>> Index Controller
var StudyController = Ember.ArrayController.extend({
needs: ['study/study'],
actions: {
filterStudies: function(){
console.log('FILTER ENGAGED!');
this.transitionToRoute('study.search', this.get('search'));
}
}
});
在StudyIndex HBS中我使用了这个,现在在需求标签之间的控制器中处理
{{action 'deleteStudy' this target='controller.controllers.study/study'}}
答案 0 :(得分:2)
视图之间不可能直接实现。 相反,您应该在控制器的帮助下实现间接通信。请考虑以下两个视图及其相关控制器的虚构示例:
您应该从FirstView向FirstController发送一个动作(需要SecondController)。然后,Controller将操作转发给SecondController。 SecondController执行它需要做的任何事情(例如设置一个属性),从而通知SecondView它。
更新:示例
Plz注意:我假设您需要从FirstView
发送到SecondView
的对象。如果您不需要为您的活动提供参数,则可以省略它。
查看:强>
App.FirstView = Ember.View.extend({
submit : function(){
//do the view part of your logic
var object = //do whatever you may need
this.get("controller").send("actionInController", object); //you do not have to send a object, if you do not need to
}
});
<强>控制器:强>
App.FirstController = Em.ObjectController.extend({
needs : ['second'],
actions : {
submitInController: function(object) {
// do the controller part of your logic
this.get("controllers.second").methodOfSecond(object);
}
},
});
App.SecondController = Em.ObjectController.extend({
someProperty : null,
methodOfSecond: function(object) {
// set whatever property so that the second view gets informed
this.set("someProperty", object);
}
});
答案 1 :(得分:1)
Ember视图之间的交互当然是可能的,但它取决于你的“交互”的含义。如果您的意思是访问其他视图中的属性,操作和功能,那么可以通过几种不同的方式轻松完成。
首先,您可以将一个视图从另一个视图扩展:
App.BaseView = Em.View.extend({
// View logic here
});
App.OtherView = App.BaseView.extend({
// Other view logic here
});
其次,你可以使用mixin来做到这一点。例如:
App.BaseStuff = Em.Mixin.create({
// Functions and other logic here
});
App.OtherView = Em.View.extend(
App.BaseStuff, { // Add mixin here
// View logic here
});
但是,如果您询问一个视图是否可以访问另一个视图可用的内容或模型,那么如果没有进一步的工作,这是不可能的。例如,使用控制器中的needs属性或访问当前路径中的数据等