рдореИрдВ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд▓реЗрдЦ рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдиреЙрдХрдЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкрд╛рдардХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддрд╛ рд╣реИ
рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИ ред
рдореЗрд░реА рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдореИрдВрдиреЗ рдиреЙрдХрдЖрдЙрдЯ.рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рдФрд░ рднреА рдЕрджреНрднреБрдд рдерд╛, рдЬрдмрдХрд┐ рдЧрдгрдирд╛ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рдбреЗрдЯрд╛ рдФрд░ рдХреЙрд▓ рд╕рдВрд╕рд╛рдзрди рдЧрд╣рди рдирд╣реАрдВ рдереЗред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдбреЗрдЯрд╛ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЧрдпрд╛ рдФрд░ рдЧрдгрдирд╛ рджрд┐рдЦрд╛рдИ рджреА рдЬреЛ рдЖрдВрдЦ рдХреЗ рд▓рд┐рдП рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╕рдордп рд▓реЗрддреА рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдкреГрд╖реНрда рдХреЛ рдЯреИрдм рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ред рдПрдХ рдЕрд▓рдЧ рдЯреИрдм рдкрд░ рдЬрд╛рдХрд░, рдореИрдВрдиреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ рдЗрд╕ рддрд░рд╣ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рдЙрдореНрдореАрдж рдХреА рдХрд┐ рдХрд┐рд╕реА рднреА рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рдореВрд▓реНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдкрд░ рдЧрдгрдирд╛ рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдореЗрдВ рдХрдореА рдЖрдПрдЧреАред рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдБ рдпрд╣ рдерд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд░реВрдкрд░реЗрдЦрд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдРрд╕реА рд╣реИ рдХрд┐ рдореВрд▓реНрдпреЛрдВ рдХреА рдкреБрдирд░реНрдЧрдгрдирд╛ рддрдм рднреА рд╣реЛрддреА рд╣реИ рдЬрдм рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореЙрдбрд▓ рд╣рд╛рдЙрд╕ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдк рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдореИрдВ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛:
рдПрдХ рдЗрдирдкреБрдЯ рдлреАрд▓реНрдб рд╣реИред рдЬрдм рдЗрд╕ рдлрд╝реАрд▓реНрдб рдХреЛ рдмрджрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред
<input data-bind="value:symbols" /> <div data-bind="text:symbolsLength"></div>
var vm={ symbols:ko.observable(''), }; vm.symbolsLength=ko.computed(function(){ return vm.symbols().length; }) ko.applyBindings(vm);
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
jsfiddleрдЕрдм рдЙрджрд╛рд╣рд░рдг рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓рддреЗ рд╣реИрдВред рд╣рдо рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдорд╛рди рдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╕реНрдерд┐рд░ HTML рд╣реЛрдЧрд╛ред рдФрд░ рд╣рдо рдПрдХ рдмрдЯрди рдмрдирд╛рдПрдВрдЧреЗ, рдЬрд┐рд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реНрд╡рд┐рдЪ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рдореИрдВ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ (рдпрд╛ рдмрд▓реНрдХрд┐, рдореИрдВ рдпрд╣ рдЪрд╛рд╣реВрдВрдЧрд╛) рдХрд┐ рдкреНрд░рддреАрдХреЛрдВ рдХрд╛ рдореВрд▓реНрдп рдЧрдгрдирд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдпрд╣ рдореВрд▓реНрдп рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЧрдгрдирд╛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рдЕрд▓рд░реНрдЯ рдбрд╛рд▓реВрдВрдЧрд╛ред
<script id="template1"> <div data-bind="text:symbolsLength"></div> </script> <script id="template2"> static html </script> <input data-bind="value:symbols, valueUpdate: 'afterkeydown'" /> <button data-bind="click:click">Change Template</button> <div data-bind="template:templateName"></div>
var vm={ symbols:ko.observable(''), templateName:ko.observable('template1'), click:function(){ vm.templateName( (vm.templateName()=='template1')? 'template2': 'template1' ); } }; vm.symbolsLength=ko.computed(function(){ alert(1); return vm.symbols().length; }) ko.applyBindings(vm);
рдЕрдм
рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖред рдкреНрд░рддреАрдХреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╕рдордп рд░реВрдкрд░реЗрдЦрд╛ рдиреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЙрд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рдореВрд▓реНрдп рдХрд┐рди рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рддреАрдХреЛрдВ рд╡рд╕реНрддреБ рдХреЛ рдкреНрд░рддреАрдХреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреЗ рдХрд╛рд░реНрдп рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдЧрд▓реА рдмрд╛рд░ рдЬрдм рдЖрдк рдкреНрд░рддреАрдХреЛрдВ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдиреЙрдХрдЖрдЙрдЯ рдкреНрд░рддреАрдХреЛрдВ рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░реЗрдЧрд╛ред рдпрд╣реА рд╣реИ, рдЬрдм рд╣рдо рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдореВрд▓реНрдп рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЧрдгрдирд╛ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рддреАрдХреЛрдВ рд▓реИрдВрдереЗрдиреНрде рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрд▓рд░реНрдЯ рджреНрд╡рд╛рд░рд╛ рдкреБрд╖реНрдЯрд┐ рдХреА рдЬрд╛рддреА рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрд▓рд░реНрдЯ рдкреЙрдк рдЕрдк рд╣реЛрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╣рдо "рдЪреЗрдВрдЬ рдЯреЗрдореНрдкреНрд▓реЗрдЯ" рдмрдЯрди рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВред
рддреЛ, рджреЛ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ:
1. рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреЛ рд╣рдореЗрд╢рд╛ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдЗрд╕ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣реАрдВ рдФрд░ рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ
2. рдЙрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдЬрд┐рд╕рдореЗрдВ рдЧрдгрдирд╛ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ DOM рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЧрдгрдирд╛ рддрдм рднреА рд╣реЛрддреА рд╣реИ рдЬрдм рдирд┐рд░реНрднрд░ рдореВрд▓реНрдп рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред
рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдердЧрд┐рдд рдХрд░реЗрдВ: ko.computed рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдЪреНрдЪреЗ рдкреИрд░рд╛рдореАрдЯрд░:
vm.symbolsLength=ko.computed({ read:function(){ alert(1); return vm.symbols().length; }, deferEvaluation:true })
рдЕрдм SymbolLength рдХреА рдЧрдгрдирд╛ рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рдж рд╣реА рд╣реЛрдЧреА, рдпрд╛рдиреА DOM1 рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ 1 рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рджред рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рдмрдиреА рд╣реБрдИ рд╣реИред рдкреНрд░рддреАрдХреЛрдВ рд╡рд╕реНрддреБ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рддреАрдХреЛрдВ рдХреА рдЧрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рднрд▓реЗ рд╣реА рдкреНрд░рддреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣реАрдВ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рдЧрдгрдирд╛ рдЕрднреА рднреА рд╣реЛрдЧреАред
рдЖрдВрддрд░рд┐рдХ рдЖрд╡рд╛рдЬ рдЖрдкрдХреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдкреНрд░рддреАрдХреЛрдВ рдХреА рд╡рд╕реНрддреБ рдХреЛ рдкреНрд░рддреАрдХреЛрдВ рд╡рд╕реНрддреБ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рд▓реЗрдХрд┐рди рдпрд╣ рдХреИрд╕реЗ рдХрд░реЗрдВ? рдФрд░ рджреВрд╕рд░рд╛ рд╕рд╡рд╛рд▓: рдХрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░?
рдореБрдЭреЗ рдЗрди рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рдорд┐рд▓ рдЧрдП рдФрд░ рдмрд╛рдж рдореЗрдВ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред рд╢рд╛рдпрдж рдПрдХ рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдкрд╣рд▓реЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░: рд╣рдо рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд╣рдо рд╕рд┐рд░реНрдл рдПрдХ рд╣реА рд╡рд╕реНрддреБ рдмрдирд╛рддреЗ рд╣реИрдВред рдФрд░ рд╡рд╣ рдлрд┐рд░ рд╕реЗ рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдЙрд╕реЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛред
рджреВрд╕рд░реЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░: рдпрд╣ рдореВрд▓реНрдп рдХреА рдЕрдЧрд▓реА рдЧрдгрдирд╛ рдХреЗ рджреМрд░рд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рдЧрдгрдирд╛ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЧреНрд░рд╛рд╣рдХ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, SymLength рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ 1 рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЗрд╕ рдореВрд▓реНрдп рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдиреЙрдХрдЖрдЙрдЯ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рджреЛ рдХрд╛рд░реНрдп рд╣реИрдВ:
getSubscosCount ()
getD рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдЬ ()
рдЗрди рдХрд╛рд░реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдореВрд▓реНрдпреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рдХреНрд░рдо рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рдпрдорд┐рддрддрд╛ рдкреНрд░рдХрдЯ рдХреА рдЧрдИ рдереА:
1. рдкрд╣рд▓реА рдЧрдгрдирд╛ рдореЗрдВ, рджреЛрдиреЛрдВ рдлрд╝рдВрдХреНрд╢рди рд╢реВрдиреНрдп рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ
2. рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧрдгрдирд╛рдУрдВ рдореЗрдВ, рдпреЗ рджреЛ рдХрд╛рд░реНрдп рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рди рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд░рд┐рднрд╛рд╖рд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╢реВрдиреНрдп рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреАрдХреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рддреАрдХреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╢реВрдиреНрдп рд╣реИред
рд╡рд░реНрдгрд┐рдд рджреЛ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЖрдк рдЙрд╕ рдХреНрд╖рдг рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдЖрдкрдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рддреЛ, рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рднрд╛рдЧ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИред рд╣рдо рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ рдЬреЛ ko.computed рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ ko.recompute рдХрд╣реЗрдВ:
ko.recompute=function(callback){ var rez=function(){ return rez.val(); }; rez.__ko_proto__=ko.observable; var o={ deferEvaluation:true, read:function(){ var s=rez.val.getSubscriptionsCount()==0; var d=rez.val.getDependenciesCount()==0; if(s!=d) { setTimeout(function(){ rez.val.dispose(); rez.val=ko.computed(o); },1); return null; } return callback(); } }; rez.val=ko.computed(o); return rez; };
рдЕрдм рд╣рдорд╛рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
var vm={ symbols:ko.observable(''), templateName:ko.observable('template1'), click:function(){ vm.templateName( (vm.templateName()=='template1')? 'template2': 'template1' ); } }; vm.symbolsLength=ko.recompute(function(){ alert(1); return vm.symbols().length; }) ko.applyBindings(vm);
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд░рддреАрдХреЛрдВ рдХреА рдЧрдгрдирд╛ рджреЛ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдШрдЯрд┐рдд рд╣реЛрдЧреА:
1. рдЬрдм рдЖрдкрдХреЛ рдкреНрд░рддреАрдХреЛрдВ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
2. рдЬрдм рдкреНрд░рддреАрдХреЛрдВ рдХрд╛ рдорд╛рди рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддреАрдХреЛрдВ рдХрд╛ рдореВрд▓реНрдп рдмрджрд▓ рдЧрдпрд╛ рд╣реИ
рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрд░рд┐рдгрд╛рдо:
jsfiddleрд▓реЗрдХрд┐рди k.recompute рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрдзрд┐рдХ рд╕рд╣реА рд╕рдВрд╕реНрдХрд░рдг xducer рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛:
ko.recompute=function(callback){ var c; function create(){ c = ko.computed({ read: callback, deferEvaluation:true, disposeWhen:function(){ return (c.getSubscriptionsCount()==0)&& setTimeout(create,0); } }); } create(); function read(){ return c(); } read.__ko_proto__=ko.observable; return read; };
рдпрд╣рд╛рдВ рд╡рд┐рд╢реЗрд╖ рдкреИрд░рд╛рдореАрдЯрд░ рдбрд┐рд╕реНрдкреЛрдЬреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЪреЗрдХ рдЧрдгрдирд╛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЙрд╕рдХреЗ рд╕рд╛рдордиреЗ рд╣реЛрдЧрд╛ред