Fancytree:如何在复杂 table 中获取输入值?
Fancytree: How can I get input value in complex table?
# this is reference picture #
我用复杂的table
$("#tree").fancytree({
checkbox: true,
.......
source: { url: "../tree-products.json"},
.......
renderColumns: function(event, data) {
var node = data.node,$tdList = $(node.tr).find(">td");
$tdList.eq(1).text(node.getIndexHier());
$tdList.eq(3).find("select").val(node.data.unit);
$tdList.eq(4).find("input").val(node.data.stusnextclassdate);
$tdList.eq(5).find("input").val(node.data.mny);
$tdList.eq(6).html(node.data.schedule);
}
})
以下为link供测试
This is google driver download link
我的问题是......
点击按钮时,需要获取fancytree的输入值。我应该如何写这个 fancytree 语法?
我试过以下语法...
$("#tree").fancytree("getTree").getSelectedNodes()
以上语法可以得到 tree-products.json 数据。无法从 renderColumns 获取数据。
如果我正确理解你的问题,你需要在元素之外访问你的 fancytree 的选择。你可以通过
$("#tree").fancytree("getTree").getSelectedNodes()
这应该 return 您在 FancytreeNode 对象中的选择。
有关详细信息,请参阅 http://www.wwwendt.de/tech/fancytree/doc/jsdoc/Fancytree.html#getSelectedNodes
编辑
好的,看了你的代码,我明白你想做什么,哪里做错了。
问题出在您的 renderColumns 方法中。在
$tdList.eq(3).find("input").val(node.key);
$tdList.eq(4).find("input").val(node.data.foo);
您正在 html 元素中设置节点数据,但这不是双向绑定。当您的输入元素更改了它们的值时,您需要更新节点数据。您可以使用 javascript 个事件来做到这一点:
renderColumns: function(event, data) {
var node = data.node;
var row = $(node.tr);
$tdList = row.find(">td");
// (Index #0 is rendered by fancytree by adding the checkbox)
// Set column #1 info from node data:
$tdList.eq(1).text(node.getIndexHier());
// (Index #2 is rendered by fancytree)
// Set column #3 info from node data:
$tdList.eq(3).find("input").val(node.key);
$tdList.eq(4).find("input").val(node.data.foo);
row.on("change", ".update-foo", function() {
node.data.foo = $(this).val();
});
}
为了使其正常工作,您需要更新 html 模板:
<tr>
<td class="alignCenter"></td>
<td></td>
<td></td>
<td><input name="input1" type="input"></td>
<td><input class="update-foo" name="input2" type="input"></td>
<td class="alignCenter"><input name="cb1" type="checkbox"></td>
<td class="alignCenter"><input name="cb2" type="checkbox"></td>
<td>
<select name="sel1" id="">
<option value="a">A</option>
<option value="b">B</option>
</select>
</td>
</tr>
或者,您可以在按钮的点击事件中读取 html 标签,但我不推荐这样做,因为您的节点数据没有更新。
希望对您有所帮助
# this is reference picture #
我用复杂的table
$("#tree").fancytree({
checkbox: true,
.......
source: { url: "../tree-products.json"},
.......
renderColumns: function(event, data) {
var node = data.node,$tdList = $(node.tr).find(">td");
$tdList.eq(1).text(node.getIndexHier());
$tdList.eq(3).find("select").val(node.data.unit);
$tdList.eq(4).find("input").val(node.data.stusnextclassdate);
$tdList.eq(5).find("input").val(node.data.mny);
$tdList.eq(6).html(node.data.schedule);
}
})
以下为link供测试
This is google driver download link
我的问题是......
点击按钮时,需要获取fancytree的输入值。我应该如何写这个 fancytree 语法?
我试过以下语法...
$("#tree").fancytree("getTree").getSelectedNodes() 以上语法可以得到 tree-products.json 数据。无法从 renderColumns 获取数据。
如果我正确理解你的问题,你需要在元素之外访问你的 fancytree 的选择。你可以通过
$("#tree").fancytree("getTree").getSelectedNodes()
这应该 return 您在 FancytreeNode 对象中的选择。
有关详细信息,请参阅 http://www.wwwendt.de/tech/fancytree/doc/jsdoc/Fancytree.html#getSelectedNodes
编辑
好的,看了你的代码,我明白你想做什么,哪里做错了。
问题出在您的 renderColumns 方法中。在
$tdList.eq(3).find("input").val(node.key);
$tdList.eq(4).find("input").val(node.data.foo);
您正在 html 元素中设置节点数据,但这不是双向绑定。当您的输入元素更改了它们的值时,您需要更新节点数据。您可以使用 javascript 个事件来做到这一点:
renderColumns: function(event, data) {
var node = data.node;
var row = $(node.tr);
$tdList = row.find(">td");
// (Index #0 is rendered by fancytree by adding the checkbox)
// Set column #1 info from node data:
$tdList.eq(1).text(node.getIndexHier());
// (Index #2 is rendered by fancytree)
// Set column #3 info from node data:
$tdList.eq(3).find("input").val(node.key);
$tdList.eq(4).find("input").val(node.data.foo);
row.on("change", ".update-foo", function() {
node.data.foo = $(this).val();
});
}
为了使其正常工作,您需要更新 html 模板:
<tr>
<td class="alignCenter"></td>
<td></td>
<td></td>
<td><input name="input1" type="input"></td>
<td><input class="update-foo" name="input2" type="input"></td>
<td class="alignCenter"><input name="cb1" type="checkbox"></td>
<td class="alignCenter"><input name="cb2" type="checkbox"></td>
<td>
<select name="sel1" id="">
<option value="a">A</option>
<option value="b">B</option>
</select>
</td>
</tr>
或者,您可以在按钮的点击事件中读取 html 标签,但我不推荐这样做,因为您的节点数据没有更新。
希望对您有所帮助