2016-08-19 13 views
0

フィールド値が少ないdefautビューモデルを持つノックアウトスクリプトがあります。フォームにデータを入力して送信すると、更新された値は返されません。たとえば、郵便番号はデフォルト負荷で定義した値Iのままです。ここでの問題は、ページがロードされる前であっても結合ノックアウトを実行しているか、あなたはそれがコード実行のために作成される前のViewModelにアクセスしようとしていることをされている可能性があり、コードノックアウトでViewModelが更新されない

$(function() { 
    ViewModel.zipCode.subscribe(function (value) { 
     $.get("/api/abc/GetCounties?zipCode=" + value, null, ViewModel.county, 'json');  
    }.bind(this)); 
}); 

var ViewModel = function (data) { 
    var self = this; 

self.zipCode = ko.observable(data.zipCode); 
self.dateOfEvent = ko.observable(new Date()); 

//Enrollment reasons 
self.enrollmentReasons = ko.observableArray(new Array()); 
$.get("/api/abc/reasons", null, self.enrollmentReasons, 'json'); 

//county from Zipcode subscribed 
self.county = ko.observableArray(new Array()); 
$.get("/api/utilityapi/GetCounties?zipCode=" + data.zipCode, null, self.county, 'json'); 

self.selectedChoice = ko.observable(); 
self.applicants = ko.observableArray(); 
self.applicants.push(new getaquoteapplicant()); 

//IsValid zip subscribed 
self.isValidZip = ko.observable(false); 


//operations 
self.addApplicant = function() { self.applicants.push(new getaquoteapplicant()) }; 
self.removeApplicant = function (getaquoteapplicant) { self.applicants.remove(getaquoteapplicant) }; 
self.save = function() {  
    $.ajax({ 
     url: '/xyz/start', 
     type: 'POST', 
     contentType: 'application/json; charset=utf-8', 
     data: JSON.stringify(data), 
     success: function (result) { 
      window.location.replace('/getaquote/planoptions', result); 
     } 
    }); 
} 

} 

var getaquoteapplicant = function() { 
    var self = this; 
    self.coverageFor = [ 
     { name: "Self" }, 
     { name: "Spouse/Life Partner" }, 
     { name: "Son" } 
    ]; 

    self.dateofBirth = ko.observable(); 
    self.tobaccoUser = [ 
     { name: "Yes", value: true }, 
     { name: "No", value: false } 
    ]; 
}; 
var defaultmodel = { 
    dateOfEvent: new Date(), 
    selectedChoice: 4, 
    zipCode:55044 
} 

ViewModel = new ViewModel(defaultmodel); 
ko.applyBindings(ViewModel); 

`

+0

を動作するようです。 jsfiddleを実行しようとしましたか? – Ramki

答えて

1

です。最後に、モデル自体を割り当てるよりも、モデルの新しいインスタンスを作成するほうが常に優れています。

私は下のフィドルでそれらを作成しました。コード内のエラーがある場合には、一般的に起こる

https://jsfiddle.net/ramkiFiddle/npsgq8uL/1/

$(document).ready(function() { 

    var viewModel = new ViewModel(defaultmodel); 
    ko.applyBindings(viewModel); 
}); 
+0

ノックアウトで宣言的なバインディングを使用するためには、準備関数をチェックする必要はありません。したがって、あなたのコードで.ready関数を取り除くと、それはやはり同じ動作をします。これは解決策にはなりません。 – Mhoque

+0

私はそうは思わない... http://stackoverflow.com/questions/14737212/should-we-wait-for-dom-to-load-before-calling-ko-applybindings – Ramki

+0

Ramki、このドキュメントから " self-invoking関数はあなたのページの底部でしか動作しません」 - ko.applyBindings(xxx)が底部にあるので、document.readyは必要ありません。 それに加えて、あなたのjsfiddleは実際に私を解決に向けて指摘しました。 私は使用していました ViewModel =新しいViewModel(defaultmodel); ko.applyBindings(ViewModel); – Mhoque

関連する問題