2014-02-06 9 views
0

Я новичок в BackboneJS и JQuery, поэтому у меня возникла проблема при попытке вернуть данные JSON из массива php.BackboneJS возвращает массив PHP в [object object]

это мой код: Модель:

var NoteModel = Backbone.Model.extend({ 
    initialize:function(){ 
    console.log('Model initialize'); 
     }, 
    url : '../www/api/controller.php' 
}); 

Вид:

var NoteView = Backbone.View.extend({ 
    el : '#result', 
    // /var note = new NoteModel(); 
    //template : _.template($("#result-view-template").html()), 
    initialize:function(){ 
     console.log('View initialize'); 
    }, 
    render :function(){ 
     //var note = new NoteModel(); 
     var note = new NoteModel(); 
     var template = _.template($("#result-view-template").html(),{result : note}); 
     this.$el.html(template); 
     return this; 
    } 
}); 

Маршрут:

Backbone.emulateHTTP = true; 
Backbone.emulateJSON = true; 


var NoteRouter = Backbone.Router.extend({ 
    routes : { 
     "result" : "displayMessage" 

    }, 
    displayMessage : function(){ 
     var notemodel = new NoteModel(); 
     var noteview = new NoteView(); 
     notemodel.fetch({ 
      success: function(){ 
        noteview.render(); 
       } 
      }) 
     }  
    }); 



var router = new NoteRouter(); 


Backbone.history.start(); 

PHP Api:

<?php 

$datas = array(
    'result '=> 'PHP array data' 
    ); 

$data = json_encode($datas); 

echo $data; 


?> 

Html вид:

<div id="result"></div> 
     <script type="text/template" id="result-view-template"> 
     <%= result %> 
      <p>result should be here</p> 
     </script> 

он должен возвращать данные PHP массив на #RESULT DIV, но это не так, вместо возвращенного [объект Object] на #RESULT дел.

+2

Вы видели на панели «Сеть» (в Firebug или webtools), что фактически приходит в ваш браузер вместо <%= result %> ?? – Jorgeblom

+0

Я делаю console.log (noteview), и он возвращает это r {cid: "view2", $ el: n.fn.init [1], el: div # result, constructor: function, initialize: function ...} –

ответ

0

Вы пытаетесь разобрать модель в шаблоне, но на самом деле вы хотите проанализировать результат метода выборки Модели.
Либо вы выбираете объект модели (возвращаемый с сервера) из функции рендеринга объекта note_View, либо создаете экземпляр модели в маршрутизаторе и передаете ее как параметр «options» в функцию инициализации note_View.

Вы можете сделать что-то вроде:

Маршрутизатор:

var notemodel = new NoteModel(); 
    notemodel.fetch({ 
     success: function(returned_model){ 
      var noteview = new NoteView({model : returned_model}); 
      } 
     }) 
    }  

Вид:

var NoteView = Backbone.View.extend({ 
    el : '#result', 
    initialize:function(options){ 
     this.model = options.model; 
     this.render(); 
    }, 
    render :function(){ 
     var template = _.template($("#result-view-template").html(),{result : this.model}); 
     this.$el.html(template); 
     return this; 
    } 
}); 
+0

Спасибо, сэр. это сработало –

0

Вы проходите весь объект в шаблон. Не помещайте никаких подобных объектов. Если вы хотите получить доступ к атрибутам, укажите его как model.attribute.

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