Zkoss 在 zhtml 中使用模板
Zkoss using template in zhtml
美好的一天。这是我的 zhtml
<x:html xmlns="http://www.zkoss.org/2005/zul"
xmlns:x="xhtml"
src="/components/public-page-template.html">
<div viewModel="@id('vm') @init('TestViewModel')">
<div children="@init(vm.testList)">
<template name="children">
<checkbox label="@load(each)"/>
</template>
</div>
</div>
</x:html>
并查看模型
public class TestViewModel {
public List<String> getTestList(){
return List.of("one", "two", "three");
}
}
我希望在呈现的 html 中看到 3 个复选框,但我得到 3 个 span
<div id="mXBQ2" class="z-div">
<div id="mXBQ3" class="z-div">
<span id="mXBQ4" class="z-label">one</span>
<span id="mXBQ5" class="z-label">two</span>
<span id="mXBQ6" class="z-label">three</span>
</div>
</div>
无论我在模板中放入什么,我都会得到 3 个跨度,模板被完全忽略。但是如果把 zhtml 改成 zul
<?xml version="1.0" encoding="UTF-8"?>
<?variable-resolver class="org.zkoss.spring.DelegatingVariableResolver" ?>
<div xmlns="http://www.zkoss.org/2005/zul" viewModel="@id('vm') @init('TestViewModel')">
<div children="@load(vm.testList)">
<template name="children">
<checkbox label="@load(each)"/>
</template>
</div>
</div>
然后模板按预期工作,我在结果中看到 3 个复选框 html。
如何使模板在我的 zhtml 中工作?
我想,您遗漏的事实是 <template>
元素不是 zul 组件(而是控制组件创建方式的 special ZUML elements)。
当 运行 你的示例代码时,我得到一个异常......它表明出了什么问题(或多或少很清楚)。
org.zkoss.zk.ui.metainfo.DefinitionNotFoundException:
Component definition not found: template in [LanguageDefinition: xul/html]
相反,您必须为这些特殊元素声明和使用相应的 namespace "zk"(.zhtml 文件与 .zul 文件具有不同的解析规则)
<x:html xmlns="http://www.zkoss.org/2005/zul"
xmlns:x="xhtml"
xmlns:zk="zk"
src="/components/public-page-template.html">
...
<zk:template>
...
</zk:template>
除此之外,我不确定根元素 x:html
的 src
属性有什么作用。在我的测试中,它被清楚地呈现给 DOM 元素,我假设您有自己的自定义处理处理。
美好的一天。这是我的 zhtml
<x:html xmlns="http://www.zkoss.org/2005/zul"
xmlns:x="xhtml"
src="/components/public-page-template.html">
<div viewModel="@id('vm') @init('TestViewModel')">
<div children="@init(vm.testList)">
<template name="children">
<checkbox label="@load(each)"/>
</template>
</div>
</div>
</x:html>
并查看模型
public class TestViewModel {
public List<String> getTestList(){
return List.of("one", "two", "three");
}
}
我希望在呈现的 html 中看到 3 个复选框,但我得到 3 个 span
<div id="mXBQ2" class="z-div">
<div id="mXBQ3" class="z-div">
<span id="mXBQ4" class="z-label">one</span>
<span id="mXBQ5" class="z-label">two</span>
<span id="mXBQ6" class="z-label">three</span>
</div>
</div>
无论我在模板中放入什么,我都会得到 3 个跨度,模板被完全忽略。但是如果把 zhtml 改成 zul
<?xml version="1.0" encoding="UTF-8"?>
<?variable-resolver class="org.zkoss.spring.DelegatingVariableResolver" ?>
<div xmlns="http://www.zkoss.org/2005/zul" viewModel="@id('vm') @init('TestViewModel')">
<div children="@load(vm.testList)">
<template name="children">
<checkbox label="@load(each)"/>
</template>
</div>
</div>
然后模板按预期工作,我在结果中看到 3 个复选框 html。
如何使模板在我的 zhtml 中工作?
我想,您遗漏的事实是 <template>
元素不是 zul 组件(而是控制组件创建方式的 special ZUML elements)。
当 运行 你的示例代码时,我得到一个异常......它表明出了什么问题(或多或少很清楚)。
org.zkoss.zk.ui.metainfo.DefinitionNotFoundException:
Component definition not found: template in [LanguageDefinition: xul/html]
相反,您必须为这些特殊元素声明和使用相应的 namespace "zk"(.zhtml 文件与 .zul 文件具有不同的解析规则)
<x:html xmlns="http://www.zkoss.org/2005/zul"
xmlns:x="xhtml"
xmlns:zk="zk"
src="/components/public-page-template.html">
...
<zk:template>
...
</zk:template>
除此之外,我不确定根元素 x:html
的 src
属性有什么作用。在我的测试中,它被清楚地呈现给 DOM 元素,我假设您有自己的自定义处理处理。