我有一个名为代码的表,用于存储与列表相关的数据(例如建筑物,房间,国家,国家等......)。此表中的Building类型将同时具有State和Country,因此在'AddEditBuildings'屏幕上我需要两个选择列表。
问题是,由于这三个数据点都位于同一个表中,因此没有关系,因此创建DetailsPicker的标准方法不起作用。我玩过弹出窗口(https://msdn.microsoft.com/en-us/library/jj733572.aspx#popup),但这不符合我的需要。
我需要将控件设置为一个文本框,当用户输入该文本框时,可用选项将按其输入进行过滤。理想情况下,他们还可以扩展以查看所有选项。基本上我需要它像标准的DetailsPicker一样工作。
使用状态控件,并从上面的链接中获取,我已经能够在'keyup'事件上打开一个文本框状态弹出窗口。但是,这有两个问题: 1)它不会根据输入文本过滤选项 2)弹出窗口显示在页面顶部(对话框),而不是附加到其下面。
这是我的代码:
在屏幕'已创建'方法中:
screen.findContentItem("Query_Codes_States").dataBind("value.selectedItem", function (newValue) {
//Whenever the State is selected, update the State value on the Code object
screen.Code.Attr05 = newValue.CodeVal;
screen.findContentItem('Code_Attr051').value = newValue.CodeVal;
//Close popup, if one is open.
screen.closePopup();
});
State Text Box postrender方法:
myapp.AddEditBuilding.Code_Attr051_postRender = function (element, contentItem) {
$(element).keyup(function () {
contentItem.screen.showPopup('StateList');
});
}
非常感谢您的帮助!
答案 0 :(得分:0)
我找到了一种合适的方法来使用弹出窗口来完成这项工作。这是如何做到的:
单击弹出窗口中的“列表”,然后单击属性中的项目点按事件。找到并选择刚刚添加到数据项列表中的项目点击数据项。单击“编辑执行代码”并键入此代码(根据您的方案进行调整):
myapp.AddEditBuilding.States_ItemTap_execute = function (screen) {
var newValue = screen.Query_Codes_States.selectedItem.CodeVal;
screen.Code.setAttr05(newValue); // This is the State field on the Building entity.
screen.closePopup();
};
在屏幕设计器中找到要修改的字段。在我的例子中,这是一个名为State的文本框。
在“属性”中,单击“编辑PostRender代码”。输入此代码(调整 对于您的场景):
myapp.AddEditBuilding.Attr05_postRender = function (element, contentItem) {
$(element).on('click', function (event) {
contentItem.screen.showPopup('StatesPopup');
})
// Prevent typing in field
$(element).on('keydown', function (event) {
event.preventDefault();
return false;
})
};
请注意,此解决方案不会在文本框中提供提示搜索。如果有人可以建议如何做到这一点,那将是很好的,请告诉我。
希望这有助于某人!