如何在 sitefinity 设计器中初始化 rad 组合框的选定索引?
How do you initialize the selected index of rad combo boxes in a sitefinity designer?
我用 thunder 和 designer 做了一个 sitefinity mvc widget。该小部件有 4 个字符串:1 个用于复选框,2 个用于标题和内容,1 个用于 radcombobox 选择。我无法使 radcombobox 上的功能正常工作(无法设置 selectedindex)。通过使用以下代码,我可以更改 radcombobox 的初始值和标题,以及正确获取值:
SitefinityWebApp.WidgetDesigners.PanelWidget.PanelWidgetDesigner.prototype = {
refreshUI: function () {
var controlData = this._propertyEditor.get_control().Settings;
jQuery(this.get_panelStyle())[0].value = controlData.PanelStyle;
jQuery(this.get_panelStyle())[0].title = controlData.PanelStyle;
}
applyChanges: function () {
var controlData = this._propertyEditor.get_control().Settings;
controlData.PanelStyle = jQuery(this.get_panelStyle()).val();
}
get_panelStyle: function () { return this._panelStyle; },
set_panelStyle: function (value) { this._panelStyle = value; }
}
我在想refreshUI 函数是我需要设置radcombobox selectedIndex 的地方,但是radcombobox 似乎没有selectedIndex 属性!我应该做这样的事情吗:
refreshUI: function () {
var controlData = this._propertyEditor.get_control().Settings;
jQuery(this.get_panelStyle())[0].value = controlData.PanelStyle;
jQuery(this.get_panelStyle())[0].title = controlData.PanelStyle;
}
或者,在我的 ascx 文件中,我是否应该放入一些带有 javascript 的脚本标签,如下所示:
<ol>
<li class="sfFormCtrl">
<asp:Label runat="server" AssociatedControlID="PanelStyle" CssClass="sfTxtLbl">Panel Style</asp:Label>
<asp:RadComboBox ID="PanelStyle" runat="server" CssClass="sfTxt" />
<div class="sfExample">The panel style to be displayed</div>
</li>
</ol>
<script type="text/javascript">
function pageLoad() {
var combo = $find(<%= PanelStyle.ClientID%>);
var item = combo.findItemByValue("3");
item.SELECT();
}
</script>
顺便说一下,这个 javascript 代码不起作用。它抛出错误:Uncaught TypeError: Cannot read 属性 'findItemByValue' of null。现在我知道这意味着 $find 没有得到 radcombobox,但是网上的每段代码都说要使用该方法。
最后,如果这看起来太多了,请告诉我。我不太擅长堆栈溢出问题。
所以我找到了答案。我希望这会在将来帮助某人。我最终从 radcombobox 更改为 raddropdownlist。它可能也可以用 radcombobox 来完成,但我还没有这样做。
注意:更新raddropdownlist 的所有代码都需要作为脚本标记放在.ascx 文件中,而不是放在.js 文件中。
对于 raddropdownlist,有一个 OnClientLoad 事件。您可以将其放入 .ascx 文件中,如下所示:
<li class="sfFormCtrl">
<asp:Label runat="server" AssociatedControlID="Tag" CssClass="sfTxtLbl">Tag Size</asp:Label>
<asp:RadDropDownList ID="Tag" runat="server" CssClass="sfTxt" OnClientLoad="timer" />
<div class="sfExample">H1, H2, H3, H4, H5, or H6</div>
</li>
然后我在 .ascx 文件中做了一些 javascript:
<script type="text/javascript">
function timer(sender, tagvar) {
window.setTimeout(function () { changeUP(sender, tagvar) }, 0000);
}
function changeUP(sender) {
var combo2 = $telerik.$("#<%= Tag.ClientID%>");
var value = combo2.val();
var combo = sender;
var item = combo.get_selectedItem();
item.set_selected(false);
var items = combo.get_items();
for (var i = 0; i < 6; i++) {
var index = items.getItem(i);
if (index.get_text() === value) {
index.set_selected(true);
}
}
}
简单解释一下,我制作了一个计时器,以便加载所有内容,但您可以将计时器设置为 0。onclientload 事件调用计时器函数,然后调用 changeUP 函数,该函数获取值,并循环通过项目,然后设置等于该值的所选项目。
我最终使用了 telerik 下拉列表的文档:http://docs.telerik.com/devtools/aspnet-ajax/controls/dropdownlist/client-side-programming/objects/raddropdownlist-object
编辑:.js 文件也需要一些代码:
refreshUI: function () {
var controlData = this._propertyEditor.get_control().Settings;
jQuery(this.get_panelStyle()).val(controlData.PanelStyle);
},
applyChanges: function () {
var controlData = this._propertyEditor.get_control().Settings;
controlData.PanelStyle = jQuery(this.get_panelStyle()).val();
}
注意:这仅适用于 raddropdownlist 项目。我删除了我拥有的其他项目的代码。
我用 thunder 和 designer 做了一个 sitefinity mvc widget。该小部件有 4 个字符串:1 个用于复选框,2 个用于标题和内容,1 个用于 radcombobox 选择。我无法使 radcombobox 上的功能正常工作(无法设置 selectedindex)。通过使用以下代码,我可以更改 radcombobox 的初始值和标题,以及正确获取值:
SitefinityWebApp.WidgetDesigners.PanelWidget.PanelWidgetDesigner.prototype = {
refreshUI: function () {
var controlData = this._propertyEditor.get_control().Settings;
jQuery(this.get_panelStyle())[0].value = controlData.PanelStyle;
jQuery(this.get_panelStyle())[0].title = controlData.PanelStyle;
}
applyChanges: function () {
var controlData = this._propertyEditor.get_control().Settings;
controlData.PanelStyle = jQuery(this.get_panelStyle()).val();
}
get_panelStyle: function () { return this._panelStyle; },
set_panelStyle: function (value) { this._panelStyle = value; }
}
我在想refreshUI 函数是我需要设置radcombobox selectedIndex 的地方,但是radcombobox 似乎没有selectedIndex 属性!我应该做这样的事情吗:
refreshUI: function () {
var controlData = this._propertyEditor.get_control().Settings;
jQuery(this.get_panelStyle())[0].value = controlData.PanelStyle;
jQuery(this.get_panelStyle())[0].title = controlData.PanelStyle;
}
或者,在我的 ascx 文件中,我是否应该放入一些带有 javascript 的脚本标签,如下所示:
<ol>
<li class="sfFormCtrl">
<asp:Label runat="server" AssociatedControlID="PanelStyle" CssClass="sfTxtLbl">Panel Style</asp:Label>
<asp:RadComboBox ID="PanelStyle" runat="server" CssClass="sfTxt" />
<div class="sfExample">The panel style to be displayed</div>
</li>
</ol>
<script type="text/javascript">
function pageLoad() {
var combo = $find(<%= PanelStyle.ClientID%>);
var item = combo.findItemByValue("3");
item.SELECT();
}
</script>
顺便说一下,这个 javascript 代码不起作用。它抛出错误:Uncaught TypeError: Cannot read 属性 'findItemByValue' of null。现在我知道这意味着 $find 没有得到 radcombobox,但是网上的每段代码都说要使用该方法。
最后,如果这看起来太多了,请告诉我。我不太擅长堆栈溢出问题。
所以我找到了答案。我希望这会在将来帮助某人。我最终从 radcombobox 更改为 raddropdownlist。它可能也可以用 radcombobox 来完成,但我还没有这样做。
注意:更新raddropdownlist 的所有代码都需要作为脚本标记放在.ascx 文件中,而不是放在.js 文件中。
对于 raddropdownlist,有一个 OnClientLoad 事件。您可以将其放入 .ascx 文件中,如下所示:
<li class="sfFormCtrl">
<asp:Label runat="server" AssociatedControlID="Tag" CssClass="sfTxtLbl">Tag Size</asp:Label>
<asp:RadDropDownList ID="Tag" runat="server" CssClass="sfTxt" OnClientLoad="timer" />
<div class="sfExample">H1, H2, H3, H4, H5, or H6</div>
</li>
然后我在 .ascx 文件中做了一些 javascript:
<script type="text/javascript">
function timer(sender, tagvar) {
window.setTimeout(function () { changeUP(sender, tagvar) }, 0000);
}
function changeUP(sender) {
var combo2 = $telerik.$("#<%= Tag.ClientID%>");
var value = combo2.val();
var combo = sender;
var item = combo.get_selectedItem();
item.set_selected(false);
var items = combo.get_items();
for (var i = 0; i < 6; i++) {
var index = items.getItem(i);
if (index.get_text() === value) {
index.set_selected(true);
}
}
}
简单解释一下,我制作了一个计时器,以便加载所有内容,但您可以将计时器设置为 0。onclientload 事件调用计时器函数,然后调用 changeUP 函数,该函数获取值,并循环通过项目,然后设置等于该值的所选项目。
我最终使用了 telerik 下拉列表的文档:http://docs.telerik.com/devtools/aspnet-ajax/controls/dropdownlist/client-side-programming/objects/raddropdownlist-object
编辑:.js 文件也需要一些代码:
refreshUI: function () {
var controlData = this._propertyEditor.get_control().Settings;
jQuery(this.get_panelStyle()).val(controlData.PanelStyle);
},
applyChanges: function () {
var controlData = this._propertyEditor.get_control().Settings;
controlData.PanelStyle = jQuery(this.get_panelStyle()).val();
}
注意:这仅适用于 raddropdownlist 项目。我删除了我拥有的其他项目的代码。