2012-09-08 378 views
0

所以我有一個淘汰的模板,它看起來像如下:屬性的一個沒有被擊倒觀察觀察到

<tbody data-bind='foreach: PrizeFulfilmentStatuses'> 
      <tr > 
       <td><input data-bind='value: Description' /></td> 
       <td><input data-bind='value: Order' /></td> 
       <td><input type="checkbox" data-bind="checked: Editable"/></td> 
       <td> <div data-bind = "attr:{color:ColorHex },style:{backgroundcolor: ColorHex}, value: ColorHex" class="colorpickerHolder" style="height:30px; border: transparent; width: 30px;"></div> </td> 
      </tr> 
     </tbody> 

現在,你可以看到,在過去的TD很多的屬性是被分配了ColorHex。現在,這是我試圖弄清楚什麼的結果。

可以看出,所有其他可觀察值(如Editable和description)都是雙向綁定,因此如果我在UI上更改任何值,那麼observable也會發生更改,並且在將數據發送回服務器時會反射回來。 ColorHex不是。發佈到服務器的值是最初來自服務器的原始值。沒有變化反映在這裏。

以下是更改綁定到ColorHex的屬性的代碼。這是一個ColorPicker jQuery插件:

self.ApplyColorPicker = function() { 
      var $target = $(this); 
      $(this).css("background-color", $(this).attr('color')); 
      $(this).ColorPicker({ 
       color: $(this).attr('color'), 
       onShow: function (colpkr) { 
        $(colpkr).fadeIn(500); 
        return false; 
       }, 
       onHide: function (colpkr) { 
        $(colpkr).fadeOut(500); 
        return false; 
       }, 
       onChange: function (hsb, hex, rgb) { 
        $target.css('backgroundColor', '#' + hex); 
        $target.attr('value', '#' + hex); 
       } 
      }); 
     }; 

你可以看到這兩條線:

$target.css('backgroundColor', '#' + hex); 
         $target.attr('value', '#' + hex); 

那些被執行時,我可以在正在既爲「背景色」變值螢火蟲看和價值。但是,當涉及發佈價值或張貼舊值不是更新值。

任何建議爲什麼?

+3

發表一個JSFiddle請:) – Charlie

回答

2

挖掘不知道當你通過JavaScript編輯值。你必須手動更新使用ko.dataFor($target[0]).ColorHex('#' + hex)的KO變量:http://jsfiddle.net/UkJ6R/

我也固定你的風格結合使用backgroundColor代替,並在onChange方法刪除了其他兩條線,因爲KO將更新這些屬性爲您服務。

+0

非常感謝你:)。 – TeaLeave