Я использую Backbone.js и StackMob для мобильного приложения и столкнулся с какой-то странной проблемой, с которой я не могу опустить голову. Согласно документам StackMob, StackMob.Model расширяет Backbone.Model и, таким образом, имеет доступ к тем же методам и должен работать одинаково. Насколько я понимаю, это простой обмен.«Неопределенный» при использовании StackMob.Model вместо Backbone.Model
Вот ситуация:
У меня есть коллекция, которая заселяется с помощью API вызова Foursquare, который визуализируется вне в представлении в виде списка. Каждая модель в списке отображается с атрибутом данных 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 и сохраняет его в 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 как undefined.
Я не могу себе представить, почему их переключение должно иметь какую-либо разницу, но, похоже, это так.
Просто ради полного осветления, вот модель при использовании Stackmob.Model:
window.Place = StackMob.Model.extend({
...
});
Любые идеи? Если бы это не сработало, я бы записал это до какой-то действительно глупой вещи, но так как он отлично работает с Backbone, но не StackMob, я действительно смущен.
Спасибо!
Итак, вы говорите, что 'new Place ({})' уступает 'undefined', когда' Place' расширяет 'StackMob.Model', но полезный объект, когда' Place' расширяет 'Backbone.Model'? –
Не совсем (хотя вроде бы вдоль этих линий). Если я пытаюсь запустить 'new Place ({})', когда Place расширяет 'StackMob.Model', он будет работать. Однако у меня есть коллекция мест ('StackMob.Collection' под названием« Места »), где модель« Place ». Когда я пытаюсь получить одну из моделей из этой коллекции и хранить ее в переменной, она не работает с StackMob, но работает с Backbone. –
Или это 'this.collection.get (window.item)', который должен инициализировать 'window.newplace'? –