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