Я пытаюсь передать выбранный элемент viewmodel в функцию сохранения. Функция save вызывается, но выбранные элементы viewmodel теряются или не передаются. Не знаете, как это сделать. Если я проверил this.ames, он не определен. Я проделал этот пример почти точно.Knockout js on click pass selected viewmodel item
<div data-bind="foreach: games, visible: games().length > 0">
<div class="row clearRight borderBottom">
<div class="col-sm-12 col-md-12 col-lg-12">
<label class="" data-bind="text: gameDate"></label>/Time:
<label class="" data-bind="text: gameTimeET"></label>/Tv Station:
<label class="" data-bind="text: tvStation"></label>
</div>
<div id="mode-group" class="btn-group btn-group-lg btn-group-justified" data-toggle="buttons">
<div class="col-sm-12 col-md-4 col-lg-4 text-center">
<label class="btn btn-default" data-bind="click: $parent.save.bind($parent)" ">
<input type=" radio" data-bind="attr: { value: awayTeam, name: gameId, id: 'a' + gameId() }">
<img data-bind="attr: { src: awayTeamLogoUrl, alt: awayTeamFullName }" style="height: 100px; width: 150px;" /><br />
<label data-bind="text: awayTeamFullName"></label>
</label>
</div>
<div class="col-sm-12 col-md-2 col-lg-2 text-center" style="padding-top: 50px;">AT</div>
<div class="col-sm-12 col-md-4 col-lg-4 text-center">
<label class="btn btn-default" data-bind="click: $parent.save.bind($parent)" ">
<input type=" radio" data-bind="attr: { value: homeTeam, name: gameId, id: 'h' + gameId() } ">
<img data-bind="attr: { src: homeTeamLogoUrl, alt: homeTeamFullName }" style="height: 100px; width: 150px;" /><br />
<label data-bind="text: homeTeamFullName"></label>
</label>
</div>
</div>
</div>
</div>
function Game(data) {
this.gameId = ko.observable(data.GameId);
this.gameWeek = ko.observable(data.GameWeek);
this.awayTeam = ko.observable(data.AwayTeam);
this.homeTeam = ko.observable(data.HomeTeam);
this.gameDate = ko.observable(data.GameDate);
this.gameTimeET = ko.observable(data.GameTimeET);
this.tvStation = ko.observable(data.TvStation);
this.awayTeamLogoUrl = ko.observable(data.AwayTeamLogoUrl);
this.homeTeamLogoUrl = ko.observable(data.HomeTeamLogoUrl);
this.awayTeamFullName = ko.observable(data.AwayTeamFullName);
this.homeTeamFullName = ko.observable(data.HomeTeamFullName);
this.winner = ko.observable("");
}
function GamesListViewModel() {
var self = this;
self.games = ko.observableArray([]);
self.gameId = ko.observable();
self.gaemWeek = ko.observable();
self.awayTeam = ko.observable();
self.homeTeam = ko.observable();
self.gameDate = ko.observable();
self.gameTimeET = ko.observable();
self.tvStation = ko.observable();
self.awayTeamLogoUrl = ko.observable();
self.homeTeamLogoUrl = ko.observable();
self.awayTeamFullName = ko.observable();
self.homeTeamFullName = ko.observable();
self.winner = ko.observable();
self.save = function() {
$.ajax("/Pick/Create", {
data: {
json: ko.toJSON({
games: this.games
})
},
type: "POST",
dataType: 'json',
success: function (result) {
alert(ko.toJSON(this.games))
}
});
};
$.ajax({
url: "/Pick/GameDetail?weekId=7",
//data: { codetype: codeType, filter: filter },
type: "POST",
dataType: 'json',
success: function (data) {
var mappedGames = $.map(data.g, function (item) {
return new Game(item);
});
self.games(mappedGames);
},
error: function (requestObject, error, errorThrown) {
var errorMessage = requestObject;
}
});
}
ko.applyBindings(new GamesListViewModel());
Я triied «$ parent.save», и он не сделал работайте. –
Поцарапайте это, теперь я знаю, где ваша проблема ... Я уточню свой ответ. – janfoeh
self.games возвращает все игры, которые не выбраны. –