Отражение в учебнике Knockout.js

0

Здесь код, взятый с сайта учебника Knockout.js:

function SeatReservation(name, initialMeal) {
var self = this;
self.name = name;
self.meal = ko.observable(initialMeal); 
} 

//View Model along with initialState
function ReservationsViewModel() {
var self = this; 

//Non-edible data
self.availableMeals = [
{mealName:"sandwhich", price: 0 },
{mealName: "Ribs", price:25 },
{mealName: "Steak", price: 50} 
]; 

//Edible data
self.seats = ko.observableArray([
new SeatReservation("Steve", self.availableMeals[0]),
new SeatReservation("Bert", self.availableMeals[0])

ko.applybindings(new ReservationsViewModel()):

Вид:

<tbody data-bind="foreach: seats">
<td data-bind = "text:name"></td>
<td data-bind = "text: meal().mealName"></td>
<td data-bind = "text: meal().price"></td>

То, что я не понимаю, - это то, почему мнение вызывает еду(). FoodName и еда(). Я ожидал, что это будет еда(). AvailableMeals.mealName и meal(). AvailableMeals.price

Теги:
backbone.js

1 ответ

1
Лучший ответ

Если вы ссылаетесь на шаг 2 из 5 в учебном пособии "Работа со списками и коллекциями", причина, по которой вы называете еду(). FoodName и meal(). Цена - это потому, что, если вы заметили, у вас есть это представление SeatReservation в этот код:

// Class to represent a row in the seat reservations grid
function SeatReservation(name, initialMeal) {
    var self = this;
    self.name = name;
    self.meal = ko.observable(initialMeal);
}

Обратите внимание, что одним из наблюдаемых привязок является self.meal. Это означает, что в ReservationsViewModel имеется массив SeatReservations (который представлен self.seats и наблюдаемым массивом), который каждый SeatReservation содержит еду.

Единственная цель доступныхMeals - предоставить данные, которые вы будете использовать для заполнения возможностей приема пищи, но на самом деле это не представление самих данных модели. (availableMeals можно было легко прочитать из базы данных и таким образом заполнить данные).

Как это работает в этом конкретном фрагменте кода, когда создается резервирование места, он ожидает имя и initialMeal. Для целей этого руководства это функция addSeat:

self.addSeat = function() {
    self.seats.push(new SeatReservation("", self.availableMeals[0]));
}

Обратите внимание, что сама ReservationsViewModel создает новую SeatReservation и передает данные availableMeal (помните, что это может происходить из базы данных), чтобы, в конечном счете, заполнить ViewModel, чтобы ваше представление обновилось.

  • 0
    Теперь я могу отдохнуть сегодня вечером. благодарю вас

Ещё вопросы

Сообщество Overcoder
Наверх
Меню