我正在尝试数据绑定app/Models/mymodel.js
app/widgets/mywidget/widget.xml
<Collection src="mymodel" instance="true" id="aModel" />
我收到以下错误:
[ERROR] : Script Error Couldn't find module: alloy/widgets/mywidget/models/mymodel for architecture: x86_64
未在WPATH
和widget/ctrl.js
中指定widget/style.tss
,导致Alloy.create*
方法从app/
控制器或模型中获取。
有没有办法指定在app/Model
widget/xml
答案 0 :(得分:0)
小部件是独立的。他们应该跨应用共享。因此,依赖于应用程序或特定模型并不是它应该采用的方式,并且它的设计使得它不会因此而工作。
如果您自己专门为此应用编写了小部件,请将其删除,然后将代码移至单独的控制器。
如果您想跨应用程序共享小部件并希望在其中使用集合,请创建导出的函数并向其提供集合。
在窗口小部件中,创建一个具有通用名称的模型文件。在widget.xml中包含该集合。然后在您的widget.js中创建一个导入集合的方法
exports.setCollection = function(collection){
$.myCollection.reset(collection.models);
}
然后在您的控制器中包含小部件:
$.myWidget.setCollection($.myOtherCollection);
这会将导入集合的所有模型设置为窗口小部件集合。有一个不匹配的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');
然后你改变了你的收藏,一切都应该工作