【发布时间】:2014-01-23 14:15:53
【问题描述】:
我正在处理一个使用模板绑定呈现的列表。这些项目有一个折叠和展开的视图,这是由单个项目上的可观察属性决定的。这是通过为模板名称提供一个函数来完成的(就像在淘汰赛文档中一样)。到目前为止一切都很好,到目前为止一切都很好。 现在..问题。我想在更改模板时为过渡设置动画。到目前为止,我已经设法为“转换中”(使用 afterRender 事件)设置动画,即在加载新模板时。但我也想在旧模板被删除之前对其进行“Out-transition”。 这就是我现在的距离。 http://jsbin.com/UvEraGO/15/edit?html,js,output
知道如何实现这个“out-transition”吗?
代码如下:
[viewmodel.js]
var vm = {
items: [{name: 'John', age:'34', expanded: ko.observable(false)},
{name: 'David', age:'24', expanded: ko.observable(false)},
{name: 'Graham', age:'14', expanded: ko.observable(false)},
{name: 'Elly', age:'31', expanded: ko.observable(true)},
{name: 'Sue', age:'53', expanded: ko.observable(false)},
{name: 'Peter', age:'19', expanded: ko.observable(false)}]
};
vm.myTransition = function(el){
$(el[1]).hide().slideDown(1000);
};
vm.templateSelector = function(item){
return item.expanded() ? 'expanded_template' : 'collapsed_template';
}.bind(vm);
vm.toggleTemplate = function(item){
item.expanded(!item.expanded());
};
ko.applyBindings(vm);
还有html:
<div data-bind="template: { name: templateSelector, foreach: items, afterRender: myTransition }"></div>
<script type="text/html" id="collapsed_template">
<div style="min-height: 30px">
<strong>Name: <span data-bind="text: name"></span></strong>
<button data-bind="click: $parent.toggleTemplate">Expand</button>
<div>
</script>
<script type="text/html" id="expanded_template">
<fieldset style="height: 100px; min-height: 8px">
<legend>
<strong>Name: <span data-bind="text: name"></span></strong>
</legend>
<div>
Age: <span data-bind="text: age"></span>
<button data-bind="click: $parent.toggleTemplate">collapse</button>
</div>
</fieldset>
</script>
【问题讨论】:
-
请编辑您的问题并在问题中包含相关代码(这样可以确保即使链接失效或 jsbin 发生变化,问题仍然相关)。
标签: javascript templates knockout.js