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をロードする方法。プロパティをマップすることができます。またはこのエラーに取り組む他の方法?
OK、それは変数が存在するが、財産 'step'このHTML内のデータを持っていないと言うだろうしませんロードされますが、実際にはデータはajax呼び出しから来るためロードする必要があります。 –
@IrfanYusanifわかりません。あなたのajax呼び出しの前に、 'currentPortfolioEntry'はnullになります。したがって' if'コンテンツはDOMに追加されません。その呼び出しの後、 'currentPortfolioEntry'に' Step'が含まれていれば、コンテンツが表示されます。あなたはもっと何を望みますか? –