2016-10-26 9 views
0

icheckプラグ用の顧客バインディングを作成しました。チェックボックスをオンにしたときにバインディングオブジェクトを更新する必要があります。ノックアウト顧客バインディングvalueAccessor()は関数ではありません

これは私のViewModel

  var userViewModel = function() { 
      var self = this; 
      self.UserFullData = ko.observable(); 
      self.loadObject = function() { 
       $.ajax({ 
        type: 'GET', 
        contentType: 'application/json', 
        url: '../UserData.do/GetUser?id=1', 
        success: function (result) { 
         var data = JSON.parse(result); 
         if (data) { 

          self.UserFullData(data); //data from ajax 
         } 
        } 
       }); 
      }; 

Ajaxのデータです:

{"User":{"ID":1,"HumanID":1,"LoginName":"cccc","LoginPass":"eeee","PermissionID":1,"DepartmentID":8,"Name":"cz","Sex":1,"SexStr":null,"EName":"cheo","NickName":"b","Company":null,"Address":null,"Email":null,"Country":0,"Province":0,"City":0,"Area":0,"PersonType":0,"Mobile":null,"PhoneNumber":"123456","MSN":null,"Fax":null,"Extension":null,"LastLoginTime":"0001-01-01T00:00:00","Position":null},"PermissionGroup":[{"ID":1,"Title":"a","View":false,"Update":true}]} 

HTML:

'表示' はFullUserData.PermissionGroup

 <div class="box" data-bind="with:UserFullData"> 
<div data-bind="foreach:PermissionGroup"> 
    <input type="checkbox" class="minimal" style="position: absolute; opacity: 0;" data-bind="iCheckBinding:View"> 

の配列内のプロパティです次はクストーですマー結合機能:

  ko.bindingHandlers.iCheckBinding = { 
      init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { 
       $(element).iCheck({ 
        checkboxClass: 'icheckbox_minimal-blue', 
        radioClass: 'iradio_minimal-blue' 
       }); 
       var value = valueAccessor(); 
       var valueUnwrapped = ko.unwrap(value); 
       if (valueUnwrapped) { 
        $(element).iCheck('check'); 
       } 
       else { 
        $(element).iCheck('uncheck'); 
       } 


       $(element).on('ifChanged', function() { 
        var newValue = this.checked; 
        var observable = valueAccessor(); 
        //observable always not a function 
        observable(newValue); 

       }); 
      } 
     }; 

今ではすべての他の人が私にはうまく動作します。..ちょうど観察できる(newValueに)私をstucked機能ではありません、私は私のオブジェクトを更新することはできません。

誰でも知っていますか?

+0

**実行可能な** Stack Snippet( '<>'ツールバーボタン)にすべてを入れて、問題が生きているかどうかを確認してください。 –

+1

これを見てください - http://stackoverflow.com/questions/21297542/integrate-icheck-plugin-with-knockout-js – gkb

答えて

0

あなたはViewが観測可能であると予想していますが、観測可能にするために何もしていません。あなたがViewをしたい場合

success: function (result) { 
    var data = JSON.parse(result); 
    if (data) { 
     self.UserFullData(data); //data from ajax 
    } 
} 

:そのコードでのみ観測可能で、あなたがここで設定UserFullData、次のとおりです。

self.UserFullData = ko.observable(); 

あなたsuccess関数のコードは、観察の内側に何もを作るために何もしませんその構造体を観察可能にするには、そうする必要があります。

+0

はいT.J.私は個々に観測可能なものを宣言しようとしました(self.View = observable(true)のように)、動作します。私はUserFullData内のすべての変数を観察可能にする必要があるとは思わない。バインドしたいデータの魔法使いが配列の場合、それをどのように処理するのですか? UserFullDataの他のプロパティを観測可能にしなかったのと同じように、なぜデフォルトのテキストバインディングでバインドできるのでしょうか? –

+0

@ ZhouCheng:すべての物件を観察可能にする必要はありませんが、観察可能なものを作成しない場合は、それをそのまま扱ってください。 'valueAccessor()'から得た値は 'View'です。それは関数ではないので、呼び出さないでください。 –

+0

多分、私の問題を解決する唯一の方法です...私はこのようにしようとしました:for(var i = 0; i

関連する問題