[英]Store's listeners fired many times
在我的MVC 3应用程序中,我想在每次有新的可用数据时刷新部分视图。 因此,要从服务器端获取这些数据,我正在使用如下的componentLoader:
Panel lowerPanel = new Panel
{
Region = Region.South,
Layout = "fit",
ID = "WarningsPanel",
AutoScroll = true,
Loader = Html.X().ComponentLoader()
.Url(Url.Action("_warningsView"))
.Mode(LoadMode.Script)
.MessageBusDirectEvents(
new MessageBusDirectEvent()
{
Name = "Warnings.Update",
Action = "_warningsView",
Buffer = 1000,
ExtraParams = { new { containerId = "WarningsPanel" } }
}
)
.Params(new { containerId = "WarningsPanel" })
.LoadMask(l => l.ShowMask = true)
};
从服务器获取新数据后,我想调用一些javascript函数。 所以我将局部视图设置如下:
@(Html.X().GridPanel()
.ID("WarningsGridPanel")
.EnableColumnResize(true)
.Store(Html.X().Store()
.DataSource(Model)
.Model(Html.X().Model()
.Fields(
Html.X().ModelField().Name("id"),
...
)
.Listeners(l =>
{
l.DataChanged.BroadcastOnBus = "Warnings.Register";
l.DataChanged.Buffer = 5000;
})
.MessageBusListeners(mbl => mbl.Add(new MessageBusListener { Name = "Warnings.Register", Fn = "WarningsStore.Register"}))
)
.ColumnModel(//Html.X().RowNumbererColumn().Align(Alignment.Center).Width(Unit.Pixel(30)),
Html.X().Column().Text("ID").DataIndex("id").Flex(1).Hideable(false),
...
)))
第一次刷新局部视图时,我可以在控制台中看到WarningsStore.Register
JS函数被调用一次,但是第二次被调用两次,第三次被调用3次...这就是我定义WarningsStore.Register
JS功能:
WarningsStore = WarningsStore || {};
WarningsStore.Register = function (message, id, eOpts) {...}
可能是什么问题? 有很多商店吗? 以错误的方式定义JS函数?
每次调用函数时,都会添加一个新的MessageBusListener。 您只能添加一次。
也许这可以帮助我刚刚将MessageBusListeners属性Single设置为true
MessageBusListeners(mbl => mbl.Add(new MessageBusListener { Name = "Warnings.Register", Fn = "WarningsStore.Register", Single=true}))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.