ExpandableSearchComponent.html:
$(document).ready(function()
{
$("#choice1").click(function()
{
var manufac=$("#choice1").val();
$.ajax({
url:"/result/"+manufac,
success:function(opts)
{
var opts=opts.split(',');
$("#list1").empty();
opts.shift();
opts.pop();
for (i=0;i<opts.length;i++)
{
$("#list1").append('<option value='+opts[i]+'>'+opts[i]+'</option>');
}
//console.log(typeof opts);
}
});
});
});
ExpandableSearchComponent.js:
<div class="${baseClass}">
<div data-dojo-type="dijit/_HasDropDown" data-dojo-props="dropDown: 'containerNode'">
<div data-dojo-type="dijit/form/TextBox"
name="${SearchViewFieldName}Textbox"
class="${baseClass}Textbox"
data-dojo-props="placeholder:'${fieldName}'"></div>
<div class="${baseClass}Container" data-dojo-attach-point="containerNode"></div>
</div>
</div>
打算像这样使用:
/**
* Javascript for ExpandableSearchComponent
*/
define([ "dojo/_base/declare", "dijit/_WidgetBase", "dijit/_TemplatedMixin",
"dojo/text!./templates/ExpandableSearchComponent.html",
"dijit/form/TextBox", "dijit/_HasDropDown" ], function(declare,
_WidgetBase, _TemplatedMixin, template, TextBox) {
return declare([ _WidgetBase, _TemplatedMixin ], {
templateString : template,
SearchViewFieldName : "",
fieldName : ""
});
});
目的是:
<div data-dojo-type="js/widgets/ExpandableSearchComponent"
data-dojo-props="SearchViewFieldName: 'machineSearchView.name', fieldName: 'Name:'">
<div data-dojo-type="dojo/store/Memory"
data-dojo-id="machineNameStore"
data-dojo-props="<s:property value='%{getNameJsonString()}'/>"></div>
<s:set name="MachineName" value="machineSearchView.name"
scope="request"></s:set>
<div data-dojo-type="dijit/form/ComboBox"
data-dojo-props="store:machineNameStore, searchAttr:'name', value:'${MachineName}'"
name="machineSearchView.name" id="machineSearchView.name"></div>
</div>
,dijit/Select
或dijit/form/ComboBox
。内部元素也会自动扩展。dijit/form/FilteringSelect
。服务器最终处理的数据是内部元素的值。
我目前面临的问题是我不知道如何使_HasDropDown如上所述正常工作。它将TextBox呈现为高度为0的元素,然后立即显示内部元素。我不确定如何绑定内部节点,使其像下拉列表一样工作。
答案 0 :(得分:2)
dijit/_HasDropDown
是一个通过继承向窗口小部件添加下拉功能的混合。它不打算用作窗口小部件,尤其是在声明性标记中。
dijit / _HasDropDown是一个提供下拉列表的dijit widget mixin 菜单功能。像dijit / form / Select这样的小部件, dijit / form / ComboBox,dijit / form / DropDownButton,和 dijit / form / DateTextBox都使用dijit / _HasDropDown来实现它们 下拉功能。
请参阅此文档,了解如何使用dijit/_HasDropDown
。 http://dojotoolkit.org/reference-guide/1.10/dijit/_HasDropDown.html
define([ "dojo/_base/declare", "dijit/form/Button", "dijit/_HasDropDown" ],
function(declare, Button, _HasDropDown){
return declare([Button, _HasDropDown], {
isLoaded: function(){
// Returns whether or not we are loaded - if our dropdown has an href,
// then we want to check that.
var dropDown = this.dropDown;
return (!!dropDown && (!dropDown.href || dropDown.isLoaded));
},
loadDropDown: function(callback){
// Loads our dropdown
var dropDown = this.dropDown;
if(!dropDown){ return; }
if(!this.isLoaded()){
var handler = dropDown.on("load", this, function(){
handler.remove();
callback();
});
dropDown.refresh();
}else{
callback();
}
}
});
});
&#13;