小部件中的数据绑定

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.jswidget/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,一切都应该有效