2014-02-09 106 views
0

我正在學習Knockout。我想要使​​用Ko.Computed返回圖像的URL,我的圖片存儲在無法解析綁定,未定義Url;

圖片根文件夾。

。在加載頁面我有以下錯誤:

Error: Unable to parse bindings.

Message: ReferenceError: Url is

not defined; Bindings value: text:Url

我的代碼如下:

<script> 
     $(function() { 
      // Model 
      var Model = { 
       id: "1", 
       path: "/Images/" 

      }; 

      // ViewModel 
      var ViewModel = function() { 
       var self = this; 
       self.Id = ko.observable(Model.id); 
       self.path = ko.observable(Model.path); 
       self.Url = ko.computed(function() { 
        return self.path+ self.Id+".jpg"; 
       }); 
       // etc... 
      }; 

      ko.applyBindings(ViewModel); 



     }); 
    </script> 

我的HTML標記是:

<img data-bind="attr:{src:Url}" /> 
<span data-bind="text:Url"></span> 

<span>Photo Id:</span> 
<input data-bind="value:Id" type="text" /> 
+2

'ko.applyBindings(視圖模型);'應該是' ko.applyBindings(new ViewModel());' – haim770

+0

@ haim770謝謝,不好意思問一下,但是請你指導我什麼時候應該使用新的,什麼時候沒有新的,因爲我是Knowckout的新手。謝謝 – user576510

+0

'applyBindings'正期待一個包含要綁定的數據的'object'。你的'ViewModel'變量引用一個'function',你需要使用'new'運算符創建一個'ViewModel'的實例。請參閱https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript – haim770

回答

2

做這樣的:

self.Url = ko.computed(function() { 
    return self.path() + self.Id() + ".jpg"; 
}); 

因爲pathId是可觀察,你應該叫他們得到價值

編輯:你也應該應用綁定爲@ haim770之前創建對象提示

ko.applyBindings(new ViewModel()); 
+0

'網址未定義' – haim770

+0

@karaxuna,謝謝。我試過,它不顯示圖像,但錯誤消失了。你可以請指導爲什麼路徑和Id應該用作path()和Id(),但它們是屬性。 2.您可以給我任何提示,我可以如何調試它,因爲在標記沒有錯誤,也只是顯示綁定文本。請指導 – user576510

+1

@ user576510 1. observables是函數,所以你應該叫它們來獲得價值。你可以登錄例如'console.log(self.path)',你會看到它是一個函數。 2.如果要調試,請按照以下方式進行調試:在計算函數中使用'var path = self.path()'並查看哪些值包含'path'變量。例如,您可以在Chrome開發人員工具中調試js – karaxuna