我在使用Ext.Net 2.5和App.Direct时遇到问题:
Ext.onReady(function() {
App.direct.GetAll({
success: function (result) {
currentMessageId = result;
}
});
});
在body onload中也存在这个问题。当我调用Ext.onReady中的直接方法时,它给了我这个错误:"不能调用未定义的gettall。"
但是,当我把它称为click button handler时,它可以正常工作。
所以,问题是:
当App.direct被定义时?
在Page Sources中可以看到如下内容:
Ext.onReady(function () {
Ext.ns("App.direct");
Ext.apply(App.direct, {
TestDirectMethod: function (config) {
return Ext.net.DirectMethod.request("TestDirectMethod", Ext.applyIf(config || {}, {}));
}
});
});
这是DirectMethod呈现给浏览器的方式。
可以看到它位于Ext.onReady函数中。因此,onReady函数在此之前执行。
你可以在使用ResourcePlaceHolder之前强制渲染onReady函数。
<%@ Page Language="C#" %>
<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
<script runat="server">
[DirectMethod]
public void TestDirectMethod()
{
X.Msg.Alert("DirectMethod", "Hello from Server!").Show();
}
</script>
<!DOCTYPE html>
<html>
<head runat="server">
<title>Ext.NET v2 Example</title>
<ext:ResourcePlaceHolder runat="server" Mode="Script" />
<script>
Ext.onReady(function() {
App.direct.TestDirectMethod();
});
</script>
</head>
<body>
<form runat="server">
<ext:ResourceManager runat="server" />
</form>
</body>
</html>
这是一个关于ResourcePlaceHolder模式的可能选项的描述。