2013-05-11 66 views

回答

1

第一结合被结合到可观察到的InfoTitle属性(未定义)。当Ajax调用完成后,Info对象是更换 - Info.Title不再是最初的约束同样Info.Title

with: -scope,但是,我相信,在这范围内绑定重新评估时,观察到Info改变,因此新Title正确地重新绑定。

要修改这一点,你需要不能代替Info,但在阿贾克斯完成其观测更新。此外,Info不需要是可观察的本身。这里有一个建议,一个编辑的小提琴:http://jsfiddle.net/PQkJb/

+0

请问您可以提供分支,更新版本的答案(答案中的JS小提琴链接是我的原始代码),谢谢 – Rodney 2013-05-11 02:18:13

+0

糟糕,当然:http://jsfiddle.net/PQkJb/ – Christoffer 2013-05-11 02:22:23

1

的问题是,你的信息属性未定义当绑定发生最初。我更新了添加一个方法到您的虚拟机,检查信息是否填充,然后返回标题。以下是JSFiddle的更新示例。更新后的绑定代码是这样的,调用VM功能:

<div data-bind="text: GetTitle()"></div> 

更新后的虚拟机看起来像这样,注意功能附加在末尾:

function DareDetailViewModel() { 
    var self = this; 
    self.Info = ko.observable(); 

    var flickerAPI = "http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?"; 
    $.getJSON(flickerAPI, { 
     format: "json" 
    }) 
    .done(function (data) 
    { 
     self.Info(new MapInfo(data)); 
     console.log(data); 
    }); 

    self.GetTitle = function() { 
     if(self.Info()) 
      return self.Info().Title(); 
    }; 
}; 

另一种选择是初始化你的信息属性一个也有一个初始标题的对象。但是,这似乎是更长的做法,所以我没有。 :)