Допустим, у меня есть JSON как это:визуализации Вид Backbone модели возвращает неопределенное значение
JSON пример, мой JSON проверяется на jsonlint и она работает.
json_object = {
"texts_model": {
"hello": "hola",
"icon_text": "Icon!"
},
"collection_vias": {
"text": "hola",
"icon_text": "Icon!"
}
};
Я сделал коллекцию, анализирующую содержимое JSON и формирует модель и коллекцию из этого JSON.
App.TemplatesCollection = Backbone.Model.extend({
model: App.TemplateModel,
url: TEMPLATES_SERVICE,
initialize: function(){
this.fetch({
success: (function() {
console.log(' Success ');
}),
error:(function (e) {
//console.log(' Error: ' + e);
}),
complete:(function (e) {
console.log(' Fetch completado con exito. ');
})
});
},
//Here i generate all my models and collections.
parse: function(response){
App.texts = new App.TemplateModel(response.text_model);
App.vias = new App.ViasCollection(response.collection_vias);
return response;
},
//I was trying with the get function but i the only thing i got was undefined.
plain_texts: function(){
return(this.get('plain_texts')) ;
}
});
И вид, как это:
App.TemplateView = Backbone.View.extend ({ эш:. App $ main_content, инициализации: функция() { _.bindAll (это , 'render'); }, // Здесь я передаю шаблон (html source), который я хочу отобразить. render: function (template) { var html = render (template, this.model.toJSON()) ; Приложение. $ Main_content.html (html); return this; } });
И мой start.js где они живут все заявления моих моделей и представлений:
// приложение App = {
init: function(){
console.log('Iniciando...');
//variables y constantes
App.$main_content = $('#main-content-content');
App.$main_header = $('#main-header-content')
App.$main_navigation = $('#main-navigation-content');
//data
App.templates = new App.TemplatesCollection();
//views
App.templateView = new App.TemplateView({model: App.texts});
//router
App.router = new App.Router();
},
start: function(){
//init
App.init();
//router
Backbone.history.start();
}
}
И маршрутизатор:
// router App.Router = Backbone.Router.extend ({
routes:{
"" : "index",
":web" : "url"
},
index: function(){
console.log("index");
//Here i do not know what to do, i mean do i have to instiate the View each time i go to index? or only render?
App.templateView = new App.TemplateView({model: App.texts});
App.templateView.render("sections/login/form");
},
url: function(web){
console.log(web);
}
});
//on document ready
$(function(){
App.start();
});
Моя проблема заключается в том, что когда HTML загружается единственное, что я имею: «Uncaught TypeError: Невозможно вызвать метод„toJSON“неопределенных»
Но когда я положил это на консоли разработчика :
App.templateView = new App.TemplateView({model: App.texts});
App.templateView.render("sections/login/form");
Мой взгляд обрабатывается правильно.
Почему мой взгляд не отображается на загрузке и только когда я помещаю свой код в консоль разработчика?
Как я могу отобразить свою модель на представлении на URL-адресе маршрутизатора? Почему я не определился с html, загруженным на консоль разработчика?
---- EDIT ---
Хорошо,
Я думаю, что я понимаю. Возможно, я создаю проблему, которая не должна иметь проблемы.
Теперь моя модель выглядит так:
App.TemplatesCollection = Backbone.Model.extend({
model: App.TemplateModel,
url: TEMPLATES_SERVICE,
plain_texts: function(){
return this.get('texts') ;
},
initialize: function(){
this.fetch();
}
});
А Вид:
App.TemplateView = Backbone.View.extend({
el: App.$main_content,
initialize: function(){
console.log(this.collection);
var ea = this.collection.get('texts');
console.log(ea);
},
render: function(template){
console.log(this.collection);
return this;
}
});
Теперь я вижу свою коллекцию в моем View.
Но когда я пытаюсь сделать это, чтобы получить только текстовую версию на мой взгляд:
var ea = this.collection.get('texts');
console.log(ea);
Im получая ошибку неопределенными:
Uncaught TypeError: Cannot call method 'get' of undefined
Любая идея о том, как я могу решить эту проблему ?
Я пытаюсь решить это самостоятельно. Я не хочу выглядеть так, как будто я хочу разработать свое решение.
Заранее спасибо.
Чтобы уточнить, вы открыли мне глаза. Я делал все неправильно. Я удалил выборку из Модели и коллекции, и когда я вызываю рендер, я пытаюсь получить собранную коллекцию и в успешном событии я визуализирую свое представление. Спасибо. – DiegoKTC