小部件中的数据绑定
Data-binding in Widgets
我正在尝试在 app/widgets/mywidget/widget.xml
中对 app/Models/mymodel.js
进行数据绑定
<Collection src="mymodel" instance="true" id="aModel" />
我收到以下错误:
[ERROR] : Script Error Couldn't find module: alloy/widgets/mywidget/models/mymodel for architecture: x86_64
未在 widget/ctrl.js
和 widget/style.tss
中指定 WPATH
导致 Alloy.create*
方法从 app/
控制器或模型中获取。
有没有办法指定在widget/xml
中使用app/Model
小部件是独立的。它们应该在应用程序之间共享。因此,对应用程序或特定模型的依赖并不是它应该的方式,它的设计因此无法正常工作。
如果您自己专门为此应用编写了小部件,请将其删除,并将代码移至单独的控制器。
如果您想跨应用共享小部件并想在其中使用 collection,请创建一个导出函数并向其提供 collection。
在您的小部件中创建一个具有通用名称的模型文件。将 collection 包含在您的 widget.xml 中。然后在你的 widget.js 中创建一个方法来导入 collection
exports.setCollection = function(collection){
$.myCollection.reset(collection.models);
}
然后在您的控制器中包括小部件:
$.myWidget.setCollection($.myOtherCollection);
这会将导入的 collection 的所有模型设置为小部件 collection。有不匹配的 ID 属性?在 setCollection
方法中进行一些转换,以便 ID 匹配。这样它就可以跨应用重复使用。
比如你的ID属性是ObjectId,那么你这个:
exports.setCollection = function(collection, IdAttribute){
_.each(collection, function(model){
model.set({id: model.get(IdAttribute)}, {silent: true});
});
$.myCollection.reset(collection.models);
}
然后在您的控制器中包括小部件:
$.myWidget.setCollection($.myOtherCollection,'ObjectId');
那么你已经改变了你的 collection,一切都应该有效
我正在尝试在 app/widgets/mywidget/widget.xml
app/Models/mymodel.js
进行数据绑定
<Collection src="mymodel" instance="true" id="aModel" />
我收到以下错误:
[ERROR] : Script Error Couldn't find module: alloy/widgets/mywidget/models/mymodel for architecture: x86_64
未在 widget/ctrl.js
和 widget/style.tss
中指定 WPATH
导致 Alloy.create*
方法从 app/
控制器或模型中获取。
有没有办法指定在widget/xml
app/Model
小部件是独立的。它们应该在应用程序之间共享。因此,对应用程序或特定模型的依赖并不是它应该的方式,它的设计因此无法正常工作。
如果您自己专门为此应用编写了小部件,请将其删除,并将代码移至单独的控制器。
如果您想跨应用共享小部件并想在其中使用 collection,请创建一个导出函数并向其提供 collection。
在您的小部件中创建一个具有通用名称的模型文件。将 collection 包含在您的 widget.xml 中。然后在你的 widget.js 中创建一个方法来导入 collection
exports.setCollection = function(collection){
$.myCollection.reset(collection.models);
}
然后在您的控制器中包括小部件:
$.myWidget.setCollection($.myOtherCollection);
这会将导入的 collection 的所有模型设置为小部件 collection。有不匹配的 ID 属性?在 setCollection
方法中进行一些转换,以便 ID 匹配。这样它就可以跨应用重复使用。
比如你的ID属性是ObjectId,那么你这个:
exports.setCollection = function(collection, IdAttribute){
_.each(collection, function(model){
model.set({id: model.get(IdAttribute)}, {silent: true});
});
$.myCollection.reset(collection.models);
}
然后在您的控制器中包括小部件:
$.myWidget.setCollection($.myOtherCollection,'ObjectId');
那么你已经改变了你的 collection,一切都应该有效