モバイルアプリに Backbone.js と StackMob を使用していますが、理解できない奇妙な問題に遭遇しました。StackMob docs によると、StackMob.Model は Backbone.Model を拡張するため、同じメソッドにアクセスでき、同じように動作するはずです。私が理解しているように、それは簡単な交換です。
状況は次のとおりです。
リストとしてビューにレンダリングされているFourSquareへのAPI呼び出しによって設定されているコレクションがあります。リスト内の各モデルは、data-id 属性でレンダリングされます。
$("ul#resultsList").append("<li class='result' data-id='" + place.get('id') + "'><span class='listingName'>" + place.get("name") + "</span><span class='listingDetail'>" + place.get("location")["address"] + "</span><span class='listingDetail'>" + place.category + "</span></li>");
(上記のコードは、リストを構築するためにループされるものです)。
リストは正常に表示され、その端のすべてが正常に機能します。次に、各リスト項目のクリック イベントに以下を追加します。
saveItem: function(e) {
window.item = $(e.currentTarget).data("id");
window.newplace = this.collection.get(window.item);
console.log("New place: "+ window.newplace); //shows the model in Backbone, undefined in StackMob
App.navigate("#add", {
trigger: true
});
},
このコードは基本的に、クリックされた項目を調べて ID を取得し、ID に基づいてコレクション内のそのモデルを検索し、window.newplace に格納します。
次に、アプリは #add に移動し、モデルとして window.newplace を使用してビューをインスタンス化します。
addItem: function() {
if (!window.newplace) {
window.newplace = new Place({});
}
this.changePage(new AddItemView({model:window.newplace}), "slide");
},
問題は次のとおりです。
これは、Place モデルが Backbone.Model として設定されている場合とまったく同じように機能します。StackMob.Model に切り替えるとすぐに、window.newplace が未定義として表示されます。
これらを切り替えることで違いが生じる理由は想像できませんが、一見違いはあります。
完全に明確にするために、Stackmob.Model を使用する場合のモデルを次に示します。
window.Place = StackMob.Model.extend({
...
});
何か案は?まったく機能しない場合は、本当にばかげたことにチョークで書きますが、Backbone の拡張では問題なく機能しますが、StackMob では機能しないため、私は本当に混乱しています。
ありがとう!