2016-06-11 26 views
0

ich bin versucht, Daten-binden ein app/Models/mymodel.js in app/widgets/mywidget/widget.xmlDatenbindung in Widgets

<Collection src="mymodel" instance="true" id="aModel" />

ich die folgende Fehlermeldung erhalten:

[ERROR] : Script Error Couldn't find module: alloy/widgets/mywidget/models/mymodel for architecture: x86_64 

Nicht WPATH in widget/ctrl.js und widget/style.tss was zu spezifizieren Alloy.create* Methoden ab app/ Controller oder Modelle abholen.

Gibt es eine Möglichkeit zu geben app/Model in widget/xml

Antwort

0

Widgets zu verwenden sind unabhängig. Sie sollen über Apps verteilt werden. Eine Abhängigkeit von der App oder einem bestimmten Modell ist also nicht so, wie es sein sollte, und es ist so konzipiert, dass es aus diesem Grund nicht funktioniert.

Wenn Sie das Widget speziell für diese App geschrieben haben, entfernen Sie es und verschieben Sie den Code auf einen separaten Controller.

Wenn Sie das Widget für verschiedene Apps freigeben und eine Sammlung darin verwenden möchten, erstellen Sie eine exportierte Funktion und stellen Sie die Sammlung bereit.

Erstellen Sie in Ihrem Widget eine Modelldatei mit einem generischen Namen. Fügen Sie diese Sammlung in Ihre widget.xml ein. Dann in Ihrem widget.js eine Methode erstellen, um die Sammlung

exports.setCollection = function(collection){ 
    $.myCollection.reset(collection.models); 
} 

dann in Ihrem Controller einschließlich das Widget zu importieren:

$.myWidget.setCollection($.myOtherCollection); 

Dadurch werden alle Modelle der importierten Sammlung an die Widget-Sammlung gesetzt. Haben Sie ein ID-Attribut, das nicht übereinstimmt? Konvertieren Sie in der setCollection Methode, damit die ID übereinstimmt. Auf diese Weise ist es in Apps wiederverwendbar.

Zum Beispiel Ihre ID-Attribut ist ObjectId, dann Sie dies:

exports.setCollection = function(collection, IdAttribute){ 
    _.each(collection, function(model){ 
      model.set({id: model.get(IdAttribute)}, {silent: true}); 
    }); 
    $.myCollection.reset(collection.models); 
} 

Dann in Ihrem Controller einschließlich des widget:

$.myWidget.setCollection($.myOtherCollection,'ObjectId'); 

Dann haben Sie Ihre Sammlung verwandelt und alles sollte funktionieren