Durandal ko mapping:映射的li不在DOM中呈现

时间:2013-10-31 08:58:07

标签: javascript html knockout.js durandal ko.observablearray

我是durandal的新人。我试图使用mimosa skelton在durandal提供的演示应用程序中添加一个新模块。

我在this

中创建了以下模块步骤

当我运行与数据绑定相关联的应用程序<li>时,不会在DOM中填充。即,页面中没有数据显示。

但是当我使用console.log在myPage.js中打印数据时,它会提供所需的输出。

我的模块backend.js

define(function(require){
  return {
    getCustomers:function(){
      //do some ajax and return a promise
        return $.ajax({
          url: 'http://graph.facebook.com/facebook?callback=?',
          dataType: 'json',
        }).promise();
    }
  };
});

my myPage.js

define(function (require) {
    var backend = require('backend');
    var ko = require('knockout');

    return {
        customer:ko.observableArray([]),
        activate:function(){
          var that = this;
          return backend.getCustomers().then(function(result){
            that.customer(result);
          });
        }
      };
});

myPage.html下

<div>
  <h2>FB Page Detail</h2>
  <ul data-bind="foreach: customer">
    <li data-bind="text: name"></li>
  </ul>
</div>

获得的结果

{"about":"Facebook's mission is to give people the power to share and make the world more open and connected.","category":"Product/service","company_overview":"Newsroom: http://newsroom.fb.com\nInvestor Relations: http://investor.fb.com/","founded":"February 4, 2004","is_published":true,"talking_about_count":207120,"username":"facebook","website":"http://www.facebook.com/facebook","were_here_count":0,"id":"20531316728","name":"Facebook","link":"http://www.facebook.com/facebook","likes":96174118,"cover":{"cover_id":"10151496277356729","source":"http://sphotos-a.ak.fbcdn.net/hphotos-ak-ash2/s720x720/247388_10151496277356729_2043388331_n.jpg","offset_y":0,"offset_x":0}} 

我做错了什么?如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

我认为你的问题是关于你如何使用knockoutJS而不是durandal ..你正在将object(单个对象)传递给你的observableArray ..虽然你应该传递对象数组或数组一个对象..

我已经制作了简单的 DEMO 来重现您的问题。

请注意,没有显示任何结果,但如果您将数据周围的 magic []放入单个对象的数组中,则会显示Facebook名称

答案 1 :(得分:-1)

不确定如何在此处应用绑定,您可能需要使用,因为您的模型在视图模型中设置为customer属性。
  data-bind="html:customer.name"