Оба кодовых блока ниже работают, в контексте и кажутся полностью функционально эквивалентными. Я понимаю js prototypes достаточно хорошо, поэтому я не спрашиваю о них как таковых (если только не является).viewmodel .prototype .функция vs self .функция в viewmodel?
Скорее, сравнивая два простых способа, чтобы положить метод на модели представления, как показано ниже, есть какие-либо последствия/различия для Knockout, например, время связывания?
определяют ([ "Нокаут", "текст ./ home.html!"], Функция (ко, homeTemplate) {// < - An AMD Module
function HomeViewModel(route) { var self = this; self.message = ko.observable('Snacks!'); self.eatSomething = function() { self.message('Yum, a viewmodel snack.'); }; } return { viewModel: HomeViewModel, template: homeTemplate }; });
против добавления Способ по прототипу:
определяют ([ "нокаут", "! текст ./ home.html"], функция (ко, homeTemplate) {
function HomeViewModel(route) { this.message = ko.observable('Snacks!'); }; HomeViewModel.prototype.eatSomething = function() { this.message('Yum, the same viewmodel snack, only different?'); }; return { viewModel: HomeViewModel, template: homeTemplate };
});
(код простые моды из Yeoman's выхода подмостей через Knockout generator. Он создал код котла пластины для knockout component, довольно недавно (KO 3.2) и очень приветствуется. Хороший компонент объяснитель KO является here.)
Полезное разъяснение - что вы подразумеваете под термином «раскрывающий модуль» **? Кстати, я просто наткнулся на ваших [Нокаутов AMD Helpers] (https://github.com/rniemeyer/knockout-amd-helpers) - выглядит чрезвычайно полезно - особенно, как модули, содержащие свои собственные шаблоны. Так что спасибо за это! –
Существует несколько ссылок, описывающих шаблон раскрывающего модуля, вот один из них: http://weblogs.asp.net/dwahlin/techniques-strategies-and-patterns-for-structuring-javascript-code-revealing-module- шаблон. В принципе, вы определяете любые методы, которые хотите внутренне, и можете напрямую ссылаться на переменные. Затем вы возвращаете публичный «API» из модуля с помощью методов, которые вы хотите открыть, с любыми именами, с которыми вы хотите их разоблачить. Надеюсь, это поможет! –
@RPNiemeyer - ты не написал блог по этому точному вопросу? Я думал, что вспомнил, что читал это в прошлом и занимался поиском в Интернете, и вот где я оказался – user210757