2016-09-27 62 views
-3

我被卡住在通過knockout.js的ko.toJSON收集json數據。有幾個可觀察的變量,當用戶鍵入一些字符串時,我可以收集一些輸入字段,但用戶單擊按鈕時無法獲得按鈕狀態。ko.toJSON不接受更新的可觀察值

的html代碼:

<input type="text" name="port_name" 
    class="form-control" 
     data-bind="value: portName" 
     placeholder="Enter name of port" /> 
<span class="input-group-btn"> 
    <button class="btn btn-switch" 
      data-bind="css: btnStatus" 
      data-toggle="button" 
      data-bind="aria-pressed: btnIsPressed" 
      autocomplete="off"> 
    <i class="fa" data-bind="css: btnName"></i> 
    </button> 
</span> 

如果用戶寫東西「port_name中指」字段,然後單擊按鈕,然後提交整個表單,通過使用ko.toJSON(viewmodel)我可以得到JSON字符串,其中portName爲寫什麼用戶,但按鈕像「btnIsPressed」這樣的狀態永遠不會改變,只是保持初始值。也嘗試添加點擊功能強制值,但它並不能幫助......

$(function() //click funcion for Port Enable buttons 
{ 
}).on('click', '.btn-switch', function(e) { 
    if (this.getAttribute("aria-pressed") == true) { 
    this.setAttribute("aria-pressed", false); 
    console.log(this.getAttribute("aria-pressed")); 
    } else { 
    this.setAttribute("aria-pressed", false); 
    console.log(this.getAttribute("aria-pressed")); 
    } 
}); 

從控制檯我可以看到「詠歎調壓」值切換,但ko.toJSON結果總是初始值。我錯過了什麼?謝謝。

視圖模型如下:

//PortViewModel 
function Port(_port_id, 
       _port_is_enabled, 
       _max_number_of_ports_per_module, 
       _id_of_last_port) { 
    this.portId = ko.observable(_port_id); 
    var portStatus = _port_is_enabled; 
    this.portName = ko.observable("No Name");//_port_name; 

    this.btnStatus = ko.pureComputed(function() { 
     return (_port_is_enabled) ? 
       "btn-success" : "active btn-danger"; 
    }); 

    this.btnIsPressed = ko.observable(_port_is_enabled); 

    this.btnName = ko.pureComputed(function() { 
     return (_port_is_enabled) ? "fa-play" : "fa-stop"; 
    }); 
} 
+0

請顯示您的型號代碼。 –

+0

不僅僅是「btnIsPressed」,除了「portName」之外,其他觀察值不會更新每個用戶的操作。 – cheart

+1

爲什麼你有兩個單獨的'數據綁定'按鈕?你有'詠歎調按'的自定義綁定? –

回答