2013-03-29 53 views
0

我遇到了将AJAX响应渲染为JSRender模板的问题。JSRender未显示JSON对象的值

我正在进行$ .getJSON调用,并成功调用render(data)函数 我使用console.log确保从$ .getJSON调用收到的数据是正确的。

function createNewsPage(event){ 
       console.log("inside createNewsPage. Event Target: "+ $(event.target).text()); 
       $.getJSON("http://query.yahooapis.com/v1/public/yql?q=xyzhere"L, 
          { 
          cache: "true", 
          dataType: "json" 
          }, 
          function(data) {insertContent(data);} 
         ); 
       event.stopPropagation(); 
       event.preventDefault(); 
       $("#listviewNews").collapsibleset('refresh'); 
       return false; 
      } 

      function insertContent(resp){ 
       console.log("---data received:\n" + JSON.stringify(resp)); 
       $("#insertedContent").html(
              $("#newsTemplate").render(resp) 
              ).trigger('create'); 

      } 

我没有得到任何错误回报,但是当模板被渲染它显示的字[对象],而不是JSON有效载荷的实际文本内容。

任何想法为什么发生这种情况,或者如何显示json对象的文本(字符串)而不是仅仅说[object]?

这里是stringfied响应(正常RSS提要):

{ 
"query": { 
    "count": 3, 
    "created": "2013-03-29T16:12:49Z" 
    }, 
    "results": { 
    "item": [ 
    { 
    "title": "BracketRacket: A quiz, a thought and Peeps" 
    }, 
    { 
    "title": "Correction: Mandatory Gun Ownership story" 
    }, 
    { 
    "title": "Clashes erupt in 2 cities in northern Egypt" 
    } 
    ] 
    } 
} 
} 
+0

请注意,发送到jsrenderer的数据必须是数组,而不是JSON对象。你能提供字符串化的回应吗? – dugokontov

+0

在问题 – sporting

+0

中提供了字符串化的响应不,它可以是一个对象。但它呈现的内容取决于你的#newsTemplate的外观。在模板中,如果'表达式'返回一个对象,'someObject,{{:expression}}不会对该对象进行字符串化,它实际上将呈现someObject.toString()。 – BorisMoore

回答

0

我不知道您的模板的样子,但这里是例子,我将如何创建一个:

<script id="tmpl" type="text/html"> 
    <tr> 
     <td>{{>title}}</td> 
    </tr> 
</script> 

而我不会传递整个数据对象,而是传递项目:

$("#insertedContent").html($("#newsTemplate").render(data.results.item)) 

这里是工作示例:http://jsfiddle.net/Gecew/3/

如果需要其他领域,如数量,比对这个例子来看看:http://jsfiddle.net/Gecew/4/

模板将需要寻找喜欢的事,这样的:

<script id="tmpl" type="text/html"> 
    <span>Number of items: <strong>{{>query.count}}</strong></span> 
    <ul> 
     {{for results.item}} 
     <li>{{>title}}</li> 
     {{/for}} 
    </ul> 
</script> 

而在这种情况下通过整个数据对象渲染方法:

$("#insertedContent").html($("#newsTemplate").render(data)) 
0

尝试做一个console.dir()上的数据,看看你得到那里。

您可能需要更改

function(data) {insertContent(data);} 

function(data) {insertContent(data.d);}