Mithril组件-有界控制器
Mithril components - bounded controllers
我有一个mithril组件,它的控制器已经被绑定到一个上下文,如果我使用m.p component(), mithril会忽略这个绑定的控制器,并为视图提供一个默认的空控制器
UserWidget = function(){
this.allUsers = User.load();
this['header'] = {
'controller' : function(users){
this.users = users;
}.bind(this, this.allUsers),
'view' : function(ctrl) {
console.log('ctrl', ctrl)
if (ctrl.users()) {
return m('.user', ctrl.users()[0].name());
}
}
}
}
//initialize
m.module(document.body, m(new UserWidget().header));
然而,如果我通过m.m module传递视图/控制器,一切都如预期的那样工作
m.module(document.body, new UserWidget().header);
https://jsfiddle.net/chifer/mwddffy4/2/是一个警告,组件控制器应该是无界的,并通过m.component调用传递参数?还是这是个bug?
是一个警告,组件控制器应该是无界的,并通过m.component调用传递参数?
是的。控制器被调用为带有new
关键字的构造函数,这意味着this
(和传入的参数)不能绑定到它。
您的代码可以通过避免this
和内部绑定来简化:
UserWidget = function(){
var users = User.load();
return {
'view' : function() {
if (users())
return m('.user', users()[0].name());
}
}
}
//initialize
m.module(document.body, m(UserWidget()));
小提琴。
但在实践中,这段代码复制了已经内置到控制器中的功能——引用Mithril组件API文档:
基本上,您的原始应用程序代码包含一个构造函数,该构造函数发出请求并存储对返回承诺的引用,这正是控制器的作用。因此,您可以避免编写任何中间函数或您自己的构造函数,并将所有功能放入组件结构本身:可选的controller函数创建一个对象,该对象可以以以下推荐的方式使用:
[…]
- 它可以存储从模型方法返回的上下文数据(即来自请求的承诺)。
- 可以保存对视图模型的引用。
UserWidget = {
'controller' : function(){
this.users = User.load();
},
'view' : function(ctrl) {
if (ctrl.users())
return m('.user', ctrl.users()[0].name());
}
}
//initialize
m.module(document.body, UserWidget);
小提琴。
相关文章:
- 通过emberJS中的控制器修改组件的属性
- EmberJs-将所有来自子组件的操作路由到父组件,再路由到父控制器
- 在javascript主组件中定义Apex控制器
- 如何观察控制器/组件内阵列的变化
- 如何将值从可视化力量组件中的脚本传递到其控制器
- 控制器中的 Emberjs-1.0 组件和计算属性
- Emberjs-1.0 将控制器实例传递给 ember 组件
- 无法识别余烬组件 - 绑定属性渗入控制器
- Ember js 2.0 将计算属性从控制器传递到组件
- 如何在 ExtJS5 中从控制器向视图添加组件
- Ember.js设置控制器属性表单组件
- AngularJS应用程序组件(模块、工厂、控制器)定义的确切工作方式
- 如何使用ui路由器在组件驱动架构中定义控制器
- 将控制器操作传递给EmberJS中的组件会返回未定义的结果
- 如何将应用程序控制器中声明的值传递给组件
- 通过聚合物核心页组件指定默认的熨斗控制器路由(内部元素)
- 如何从成员控制器或组件观察把手模板中的多个状态
- 使用`this$watch`而不是'scope$手表`with'控制器组件'
- 角度2:在控制器/组件中创建路由
- 扩展控制器组件angularjs