2. 2Sobremim
/43
João Pedro “jota” Martins
CTO
jota@create.pt
@lokijota
http://blogit.create.pt/blogs/joaomartins
http://www.linkedin.com/in/joaopedromartins
3. 3Agenda
O que é KnockoutJS?
Observables
Computed Members
ObservableArrays
Bindings nativos
Templatese controlode fluxo
Extensãode Binding Handlers
Temas relâmpago:
MappingPlugin,Extenders,KoUtils,Debug/troubleshooting
/43
4. 4OqueéKnockoutJS?
BibliotecaJavascriptque ajuda na criaçãode interfacesdinâmicos
sobreum modelo de dados limpo, usando MVVM.
Poroutraspalavras:éuma frameworkJavascriptde data binding para
aplicaçõesWeb.
ELEVATORPITCH /43
14. Membroscalculados-Computed
Definiruma função que defineum valor,e usarisso no binding
Ex:Nomecompleto,PhotoUrl,Montantestotais
Quando os observablessão alterados,os camposcomputedtambém
são notificados– detecçãoimplícita de dependências
Gestão de “this”…
Pode sernecessáriopassarinformaçãosobreo“this”paraocomputed
CONCEITOSBASE /43
14
17. ObservableArray
Permite‘seguir’os itens de um array,não o seu estadointerno
Notificaçõesgeradasquando itens são Adicionadosou Removidosdo
Array
Suporta API normais sobrearrays(push, pop, length,…)
Não são geradasnotificaçõesquando as propriedadesde itensdo
arraysão alterados
Necessáriousarko.observable()nessaspropriedadestambém
CONCEITOSBASE /43
17
18. ExemplodeObservableArray
CONCEITOSBASE
var myViewModel = {
salesPerson: ko.observable(“Luis Calado"),
empNum: ko.observable(666),
products: ko.observableArray([
{ model: “Surface Pro", price: 1749, id=123 },
{ model: “Windows Azure", price: 189, id=456 }
])
};
<span data-bind="text: products().length"></span>
Pré-popular com
dados
Agir sobre o
observable array
/43
18
21. Bindingsnativos(2)
CONCEITOSBASE
attr checked click css disable
enable event hasfocus html options
optionsText optionsValue selectedOptions style submit
text uniqueName value visibletext value
click disable
enable
attr
Display and state bindings
Text and value bindingsBindings for specific attributes
visible
event
Event bindings
/43
21
Fazer demo com o exemplo do Google
Fazer algum exemplo mais complexo: shopping cart, email cliente, alguma coisa com json a ser lido/escrito do servidor? Todo?
Description
Shows the knockout context & data for the selected dom node in a sidebar of the elements pane.
Knockoutjs debugging extension. Adds a extra sidebar in the elements pane of the chrome dev tools with the relevant knockout context and data for the selected element. Very usefull if you got large/nested viewmodels. Allows to add tracing to every observable/computed. Allows to edit observables from the console.(https://github.com/timstuyckens/chromeextensions-knockoutjs/wiki/Editing-viewmodel-binding-values) Source code is on github: https://github.com/timstuyckens/chromeextensions-knockoutjs