問題は、バインドが最初に発生したときに Info プロパティが未定義であることです。Info が入力されているかどうかを確認してから Title を返すメソッドを VM に追加するように更新しました。JSFiddleの更新された例を次に示します。更新されたバインディング コードは次のとおりで、VM 関数を呼び出します。
<div data-bind="text: GetTitle()"></div>
更新された VM は次のようになります。最後に関数が追加されていることに注意してください。
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();
};
};
もう 1 つのオプションは、最初の Title を持つオブジェクトで Info プロパティを初期化することです。しかし、それはそれを行うためのより長い方法のように思われるので、私はしませんでした. :)