小部件中的数据绑定

时间:2016-06-11 15:27:33

标签: backbone.js titanium appcelerator titanium-alloy

我正在尝试数据绑定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

未在WPATHwidget/ctrl.js中指定widget/style.tss,导致Alloy.create*方法从app/控制器或模型中获取。

有没有办法指定在app/Model

中使用widget/xml

1 个答案:

答案 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');

然后你改变了你的收藏,一切都应该工作