1

検索フォームにデータを入力するために、次のViewModelを使用しています:

 function AppViewModel() {
    var self = this;
    self.Countries =[{"id": "1","name": "Russia"},{"id": "2","name": "Qatar"}];
    self.selectedCountryId =ko.observable();      
 }

dropdwonlist にデータを入力するには、Countries リストが必要です。ユーザーがフォームに入力して「送信」をクリックすると、データを送信する必要がありますが、国リストを送信する必要はありません! (SelectedCountryId のみ)

var vm=new AppViewModel();
ko.applyBindings(vm);

$('button').click(function(){

  console.log(ko.mapping.toJSON(vm));

}); 

送信用に新しいViewModelを作成せずに国のリストを取り除く方法はありますか?

4

2 に答える 2

1

Observable は通常の関数と同じなので、外部から呼び出すだけです。

function AppViewModel() {
    var self = this;
    self.Countries =[{"id": "1","name": "Russia"},{"id": "2","name": "Qatar"}];
    self.selectedCountryId = ko.observable('1');      
}

$(function() {
    var vm = new AppViewModel();
    ko.applyBindings(vm);

    $('button').click(function(){
      console.log(vm.selectedCountryId()); // plain
      console.log(ko.toJSON(vm.selectedCountryId())); // json
    });
});

</p>

http://jsfiddle.net/DiegoVieira/6kZMj/4/

于 2012-11-27T11:17:44.853 に答える
0


私が作成したこのデモをご覧ください。DEMO はここをクリックしてください。


更新されたデモ 更新されたデモHTML コードについては、ここをクリックしてください

<select data-bind="options: countries, optionsText: 'name', optionsValue: 'id', value: selectedChoice, optionsCaption: 'Choose..'"></select>
<br/>
<label data-bind="text: selectedChoice"></label>


Javascript コード

var CountryModel = function(data){
  var self = this;
  self.id = ko.observable(data.id);
  self.name = ko.observable(data.name);
};
var viewModel = function(data) {
  var self = this;
  self.selectedChoice = ko.observable();
  self.countries = ko.observableArray([
      new CountryModel({id: "1", name: "Russia"}),
      new CountryModel({id: "2", name: "Qatar"})]);
};

ko.applyBindings(new viewModel());


START UPDATE

更新内容:

HTML コード:
イベントに追加されたボタン クリックするとsendMe、の json オブジェクトを返す関数が呼び出されますselectedCountryId

<input type="button" data-bind="click: sendMe, enable: selectedChoice" Value="Click Me"/>


Javascript コード

self.sendMe = function(){

    alert(ko.toJSON({ selectedCountryId: this.selectedChoice()}));
};


END UPDATE
START UPDATE1
これは、回避追加モデルに関する最後のコメントの更新です。この場合はスキップしましょう。CountryModel
したがって、Javascript コードは次のようになります。

var viewModel = function(data) {
   var self = this;
   self.selectedChoice = ko.observable();
   self.countries = ko.observableArray([
        {id: "1", name: "Russia"},
        {id: "2", name: "Qatar"}]);
    self.sendMe = function(){
        alert(ko.toJSON({ selectedCountryId: this.selectedChoice()}));
    };
};

ko.applyBindings(new viewModel());

END UPDATE1

お役に立てば幸いです。
ありがとう。

于 2012-11-27T11:34:39.270 に答える