我们有Sitecore SPEAK页面,其中包含一组文本框,单选按钮和组合框。当用户为特定字段(姓氏)输入一些值时,我们需要自动填充或自动填充这些字段。
有谁知道我们如何使用Sitecore SPEAK做到这一点?
我们已经尝试过: 我们有一个cshtml文件,显示放置在用户查找部分下的SPEAK页面内的搜索记录。
当用户在lastname字段中输入一些值时,我们从数据库中检索数据并显示它。
this.on("change:input", this.users, this); // defined in the initialize method
//User function to load records
users: function () {
var input = this.get("input");
$.ajax({
url: "/api/sitecore/Order/FindUsers",
type: "POST",
data: { input: input },
context: this,
success: function (data) {
this.set("output", data);
}
});
}
//CSHTML code
@using Sitecore.Mvc
@using Sitecore.Mvc.Presentation
@using Sitecore.Web.UI.Controls.Common.UserControls
@model RenderingModel
@{
var rendering = Html.Sitecore().Controls().GetUserControl(Model.Rendering);
rendering.Class = "sc-UserList";
rendering.Requires.Script("client", "UserSearch1.js");
rendering.GetString("input", "input");
var htmlAttributes = rendering.HtmlAttributes;
}
<div @htmlAttributes >
<p id="eventTitle"></p>
<table class="table table-hover">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
</tr>
</thead>
<tbody data-bind="foreach: output">
<tr>
<td><a data-bind="text: FirstName, click: function (data) { loadData('data-sc-id'); } "></td>
<td data-bind="text: LastName"></td>
</tr>
</tbody>
</table>
<script>
function loadData(attribute) {
var matchingElements = [];
var allElements = document.getElementsByTagName('*');
for (var i = 0, n = allElements.length; i < n; i++) {
if (allElements[i].getAttribute(attribute) !== null) {
if (allElements[i].accessKey == 'newitem1') {
allElements[i].innerHTML = "testtt";
allElements[i].innerText = "testtt";
}
matchingElements.push(allElements[i]);
}
}
return matchingElements;
}
</script>
</div>
一旦用户点击用户查找部分中的特定记录,我们需要使用检索到的值填充或自动填充该页面中的其余字段,但我们无法这样做。
由于我们没有特定的id来捕获和设置值,我们设置了一个accessKey并找到了我们想要的控件,但是当我们设置innerHTML或innerText时它没有反映出来。
所以任何人都知道我们如何使用sitecore SPEAK进行自动完成?
答案 0 :(得分:0)
相当广泛的问题,但查看文档和业务组件库,AdvancedComboBox
可能是合适的。
https://doc.sitecore.net/speak/components/advancedcombobox
这可以在用户在组合框中输入时搜索项目。