2017-12-24 16 views
0

HTMLの前に:防ぎ、HTMLの読み込みノックアウトマッピングでのデータのロード

<div id="knockoutBinding"> 
    <div class="toolbar" data-bind="template: 'user-portfolio-entry' "></div> 
</div> 

<script id="user-portfolio-entry" type="text/html"> 
<!-- ko if: vm.currentPortfolioEntry().hasOwnProperty('Step') --> 
//other stuff 
<!-- /ko --> 
</script> 

はJavaScript:

Uncaught TypeError: Unable to process binding "template: function (){return 'user-portfolio-entry' }" Message: Unable to process binding "if: function(){return vm.currentPortfolioEntry().hasOwnProperty('Step') }" Message: Cannot read property 'hasOwnProperty' of null

とラインで:

var UserPortfolioViewModel = function() { 
     var self = this; 

     self.currentPortfolioEntry = ko.observable(null); 
     $.ajax({ 
      type: "POST", 
      url: getPortfolioEntryUrl, 
      data: JSON.stringify(data1), 
      dataType: "json", 
      contentType: "application/json", 
      success: function (response) { 
       self.currentPortfolioEntry(ko.mapping.fromJS(response)); 
      }, 
      error: function (data) { 
       alert("fail"); 
      } 
     }); 
} 
var vm; 
    $(function() { 
     vm = new UserPortfolioViewModel(); 
     ko.applyBindings(vm, $("#knockoutBinding")[0]); 
    }); 

私はエラーを取得しますajaxの成功が実行されるself.currentPortfolioEntry(ko.mapping.fromJS(response));それから私はvm.currentPortfolioEntry().hasOwnProperty('Step')の値をコンソールで見ることができますが、その時htmlは読み込みを完了し、htmlでデータを取得できませんでした。

ajaxの成功後にhtmlをロードする方法。プロパティをマップすることができます。またはこのエラーに取り組む他の方法?

答えて

2

あなたは次のように変数抜けるかどうかをテストするためにあなたのifをリファクタリングできます

<!-- ko if: vm.currentPortfolioEntry() && vm.currentPortfolioEntry().hasOwnProperty('Step') --> 
+0

OK、それは変数が存在するが、財産 'step'このHTML内のデータを持っていないと言うだろうしませんロードされますが、実際にはデータはajax呼び出しから来るためロードする必要があります。 –

+0

@IrfanYusanifわかりません。あなたのajax呼び出しの前に、 'currentPortfolioEntry'はnullになります。したがって' if'コンテンツはDOMに追加されません。その呼び出しの後、 'currentPortfolioEntry'に' Step'が含まれていれば、コンテンツが表示されます。あなたはもっと何を望みますか? –

関連する問題