2014-02-07 2 views
0

Я пытаюсь отправить некоторые данные JSON из экспресс-модели на базовую модель.Отправка данных JSON от Nodejs Express на магистраль

Update
console.log(response) в parse function модели печатает значения, как {"version":"1.0","balance":"80.0"}

console.log(this.model) в render() функции View дает {}


Server Side Node JS

var express = require('express'); 

var app = express(); 

app.listen(3000); 

    app.get('/getInfo', function(req, res){ 
     //res.setHeader('Content-Type', 'application/json'); 
     res.json({version: "1.0", balance: "80.0"}); 
    }); 

На Node JS стороне я попытался следующее:

app.get('/getInfo', function(req, res){ 
    res.setHeader('Content-Type', 'application/json'); 
    res.send({version: "1.0", balance: "80.0"}); 
}); 

Backbone Модель

var Bitcoin = Backbone.Model.extend({ 
    url:'http://localhost:3000/getInfo', 
    parse: function(response) { 
     console.log(JSON.stringify(response)); 
     return response; 
    } 
}); 

var info = new Bitcoin(); 
info.fetch(); 

Он отлично работает, если я изменю его var info = new Bitcoin ({version: "1.0", balance: "80.0"});

Магистральная Посмотреть

var BitcoinView = Backbone.View.extend({ 
    id:'info', 
    class:'bitcoin', 
    template: _.template('<span> <%= balance %> </span>'+ 
         '<span><%= version %></span>'), 
    render: function() { 
      console.log(JSON.stringify(this.model)); 
     var attributes = this.model.toJSON(); 
     this.$el.html(this.template(attributes)); 
    } 
}); 

var bitcoinView = new BitcoinView({model: info}); 
bitcoinView.render(); 

$('#app').html(bitcoinView.el); 

Консоль

Uncaught ReferenceError: balance is not defined (from View) 
XHR finished loading: "http://localhost:3000/getInfo". 
{"version":"1.0","balance":"80.0"} (from parse function) 

ответ

1

Вы, вероятно, пытаются изобразить модель, которая не имеет значения для некоторых атрибутов. Шаблон вашего представления ожидает, что эти атрибуты будут присутствовать. Добавьте defaults к вашей модели, чтобы предотвратить возникновение ошибки метода template.

var Bitcoin = Backbone.Model.extend({ 
    url:'http://localhost:3000/getInfo', 
    parse: function(response) { 
     console.log(JSON.stringify(response)); 
     return response; 
    }, 
    defaults: { 
     balance: "", 
     version:"" 
    } 
}); 

По вашему мнению вы привяжите render к событию изменения вашей модели. Таким образом, просмотр изменится при изменении модели (данные будут извлечены).

this.model.bind("change", this.render, this); 

Альтернативно, вам необходимо убедиться, что данные получены до визуализации представления. Вы можете использовать callback function of the fetch function.

info.fetch({ 
    success: function(){ 
     //create view here 
    } 
}); 
+0

'синтаксического анализа: функция (ответ) { console.log (JSON.stringify (ответ));' дает мне '{ "версию": "1.0", "баланс": "80,0"}' , Означает ли это, что модель пуста? –

+0

Да, или создаваемый объект не в правильном формате. Или, возможно, вы пытаетесь отобразить представление перед вызовом функции parse. Таким образом, рендеринг с пустым объектом – Hazaart

+0

Я думаю, что вы правы. Я разместил весь свой код, серверную сторону, а также клиентскую сторону. Вы видите какую-то проблему? –

Смежные вопросы