我用设计师使用迅雷制作了一个sitefinity mvc小部件。小部件有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的地方,但是看起来radcomboboxes没有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:无法读取null的属性'findItemByValue'。现在我知道这意味着$ find没有得到radcombobox,但是在线的每一段代码都说要使用那种方法。
最后,如果这看起来太多了,请告诉我。我对堆栈溢出问题不太满意。
答案 0 :(得分:0)
所以我找到了答案。我希望这将有助于将来的某些人。我最终从radcombobox更改为raddropdownlist。它也可以用radcombobox完成,但我还没有做到这一点。
注意:更新raddropdownlist的所有代码都需要在.ascx文件中作为脚本标记,而不是在.js文件中。
对于raddropdownlist,有一个OnClientLoad事件。您可以将其放在.ascx文件中,如下所示:
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:choiceMode="singleChoice"
android:divider="@color/accent"
android:dividerHeight="0dp"
android:background="#ff669900"
tools:context=".NavigationDrawerFragment"
android:clickable="true"
android:alpha="255" />
然后我在.ascx文件中做了一些javascript:
<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>
简单解释一下,我创建一个计时器以便加载所有内容,但是你可以将计时器设置为0. onclientload事件调用timer函数,然后调用changeUP函数,它获取值,并循环遍历项目,然后设置所选项目等于该值。
我最终使用了telerik下拉列表的文档:http://docs.telerik.com/devtools/aspnet-ajax/controls/dropdownlist/client-side-programming/objects/raddropdownlist-object
编辑:.js文件也需要一些代码:
<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);
}
}
}
注意:这仅适用于raddropdownlist项目。我删除了其他项目的代码。