我正在将 Backbone.js 和 StackMob 用于移动应用程序,但遇到了一个我无法理解的奇怪问题。根据 StackMob 文档,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,我真的很困惑。
谢谢!