【问题标题】:Data-binding in Widgets小部件中的数据绑定
【发布时间】:2016-06-11 15:27:32
【问题描述】:

我正在尝试将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

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

有没有办法指定在widget/xml中使用app/Model

【问题讨论】:

    标签: backbone.js titanium appcelerator titanium-alloy


    【解决方案1】:

    小部件是独立的。它们应该在应用程序之间共享。因此,对应用程序或特定模型的依赖不是应有的方式,并且它的设计因此无法正常工作。

    如果您自己专门为此应用编写了小部件,请将其删除,并将代码移至单独的控制器。

    如果您想跨应用共享小部件并希望在其中使用集合,请创建一个导出函数并将集合提供给它。

    在您的小部件中创建一个具有通用名称的模型文件。将该集合包含在您的 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');
    

    那么你已经改变了你的收藏,一切都应该可以工作

    【讨论】:

      猜你喜欢
      • 2013-06-03
      • 1970-01-01
      • 2012-05-28
      • 2013-12-17
      • 1970-01-01
      • 2011-03-30
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多