2016-07-06 7 views
0

Я хочу, чтобы иметь возможность создать обязательный контекст привязки к собственности, таким же образом, как with переплетных работы:набора привязки контекста к свойству

<div data-bind="with: myData"> 
     <button data-bind="text: myHeader"></button> 
</div> 

Но я не хочу использовать with, потому что он воссоздает элементы HTML (в button в моем примере) каждый раз, когда myData изменений см http://knockoutjs.com/documentation/with-binding.html:

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

Так что мне нужно что-то похожее на with связывания, скажем, context связывание:

<div data-bind="context: myData"> 
     <button data-bind="text: myHeader"></button> 
</div> 

<button> теперь связан с myData контекста, так что я не должен писать:

<div> 
     <button data-bind="text: myData().myHeader"></button> 
</div> 

Это также описано в http://www.knockmeout.net/2012/03/knockoutjs-performance-gotcha-1ifwith.html

С привязкой очень удобно для привязки к вложенным объектам/моделям и помогает сохранять атрибуты привязки данных от , становясь слишком подробными. Важно, однако, понимать, что со связыванием будет перерисовывать весь раздел всякий раз, когда изменяется его связанное значение .

Что-то вроде этого существует в КО?

ответ

-1

Я не думаю, что цитата из документов означает, что вы думаете, что она делает.

Если есть наблюдаемые в объекте, который вы используете в with связывания, и те наблюдаемые изменяются, то тело элемента, который имеет те with связывания не будет повторно вынесено безоговорочно.

Попробуйте. Выполнить этот фрагмент и типа в входного элемента в то время как приращение счетчика:

var vm = { 
 
    sample: { 
 
    counter: ko.observable(0) 
 
    } 
 
}; 
 

 
ko.applyBindings(vm); 
 

 
setInterval(function() { 
 
    vm.sample.counter(vm.sample.counter() + 1); 
 
}, 1000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 

 
<div data-bind="with: sample"> 
 
    <input type="text" value="type here"> 
 
    <div>Counter: <span data-bind="text: counter"></span><div> 
 
</div>

Что означает, что документация: Если with связывания указывает на наблюдаемой и , что наблюдаемые изменения, то тело элемента будет повторно показано.

«Если выражение, которое вы поставляете, включает в себя любые наблюдаемые значения», относится к выражению, которое вы передаете привязке with. В вашем случае это выражение является единственным значением, myData.Есть ли какие-либо наблюдаемые внутриmyData совершенно не имеет значения.

 Смежные вопросы

  • Нет связанных вопросов^_^