2017-04-02 80 views
1

我想使用敲除來在控制檯中打印輸入元素的值。使用值綁定不提供更新值的敲除

當我嘗試打印該值時,我得到的是「結果」而不是文本框的值。

var ViewModel = { 
 
    name: ko.observable("name"), 
 
    company: ko.observable("company"), 
 
    submit: ko.observable("Submit"), 
 
    onsubmit: function(){ 
 
     console.log(name); 
 
    } 
 
} 
 

 
ko.applyBindings(ViewModel);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script> 
 

 
<form> 
 
    <label>Name</label> 
 
    <input type="text" data-bind="value:name"/> 
 
    <label>Company</label> 
 
    <input type="text" data-bind="value:company"/> 
 
    <button data-bind="click:onsubmit,text:submit"></button> 
 
</form>

回答

1

你也可以這樣來做。我喜歡爲我的viewmodel聲明一個函數,以便稍後它可以用來初始化另一個新對象。

var ViewModel = function() { 
 
    var self = this; 
 
    self.name = ko.observable("name"); 
 
    self.company = ko.observable("company"); 
 
    self.submit = ko.observable("Submit"); 
 
    self.onsubmit = function(){ 
 
    alert(self.name()) 
 
    console.log(self.name()); 
 
    }; 
 
} 
 
ko.applyBindings(new ViewModel());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 

 
<label>Name</label> 
 
<input type="text" data-bind="value: name"/> 
 
<label>Company</label> 
 
<input type="text" data-bind="value: company"/> 
 
<button data-bind="click: onsubmit, text: submit"></button>

+0

由於它的工作。你可以請我解釋我做錯了什麼 – harry19

+0

我相信這個問題是因爲當你調用console.log(name)時,那裏的名字沒有引用你聲明的同名的observable值。這可以通過做var self = this來解決。並使用self.name來確保它引用了正確的名稱對象 – muhihsan

+0

我們可以直接使用「this.name」嗎? – harry19