我是Knockout.js的新手,最近我开始使用JQuery和可淘汰的可排序项目。对于我的项目,我使用复杂的数据结构来显示某些表单。有一次,我正在尝试制作一个包含问题的嵌套可排序页面数组。我能够获得一个容纳所有页面及其信息的容器,但是我无法让容器正确显示问题。
以下是HTML中的内容:
<h2><span data-bind="text: DiscoveryFormUpdateLabel"></span></h2>
<div class="pagesList" data-bind="foreach:discoveryForm">
<div class="row">
<div class="text-area">
<label>Discovery Form Name: </label>
<input data-bind="value:Name" width="400" />
</div>
</div>
<br />
<br />
<br />
<div class="row">
<div class="text-area">
<label>Welcome (HTML):</label>
<textarea data-bind="value: Welcome" rows="12" cols="89"></textarea>
</div>
</div>
</div>
<ul data-bind="sortable: {template: 'pages', data:discoveryFormPages}"></ul>
<script type="text/html" id="pages">
<li>
<div class="row">
<label>Name: </label>
<input data-bind="value:Name" />
</div>
<div class="row">
<label>Questions:</label>
</div>
<ul data-bind="sortable: {foreach:Questions}">
<li>Foo</li>
</ul>
<ul data-bind="foreach:Questions">
<li>Foo</li>
</ul>
<ul data-bind="sortable: { template: 'questions', foreach:Questions}" width="80%"></ul>
</li>
</script>
<script type="text/html" id="questions">
<li>
<div class="row">
<label>Subject:</label>
<textarea data-bind="value:Subject" cols="45"></textarea>
</div>
<div class="row">
<label>Type:</label>
<select data-bind="options: $root.questionTypes, optionsText:'Description', value:Type"></select>
</div>
<div class="row">
<label>Tagline:</label>
<textarea data-bind="value: Tagline" cols="45"></textarea>
</div>
<div class="row">
<label>Visible:</label>
<input type="checkbox" data-bind="checked:Visible" />
</div>
</li>
</script>
在pages
模板中,我使用三种不同的方式尝试显示问题。第一种方法显示一个可排序的Foo
,第二种方法显示正确的Foo
个数,第三种方法显示一个没有项目的空白可排序区域。我正在研究JS Fiddle,但我必须从数据库中获取复杂的信息,因此需要时间。任何帮助也会受到欢迎:)。
那么,我的问题是,为什么我会得到三个不同的东西,哪里出错?
编辑:我的模板基于this。
我正在使用this项目。
我设想最终结果与this有些相似。
答案 0 :(得分:4)
在jsFiddle中获取示例可能会有所帮助,但它看起来像:
对于这个:<ul data-bind="sortable: {foreach:Questions}">
您想要sortable: Questions
只相当于sortable { data: questions }
对于这个:<ul data-bind="sortable: { template: 'questions', foreach:Questions}" width="80%"></ul>
您想:sortable: { template: 'questions', data: Questions }
所以,主要是使用data
代替foreach