gpt4 book ai didi

javascript - 使用 Jaxer 时定义对象

转载 作者:行者123 更新时间:2023-11-29 22:43:57 25 4
gpt4 key购买 nike

我一直在玩 Jaxer虽然这个概念很酷,但我不知道如何定义在客户端和服务器上都可用的对象。我找不到任何定义对象的示例。

我希望能够定义一个对象并指定哪些方法在服务器上可用,哪些方法在客户端可用,哪些在客户端可用但在服务器上执行( server-proxy). 可以不使用三个独立的 <script 来完成吗? > 带有不同 runat 的标签属性?如果可能的话,我希望能够在同一个 js 文件中定义我的所有方法,并且使用三个单独的标签在 html 中内联定义我的对象是不切实际的...

基本上我希望能够在一个 js 文件中执行此操作:

function Person(name) {
this.name = name || 'default';
}
Person.runat = 'both';

Person.clientStaticMethod = function () {
log('client static method');
}
Person.clientStaticMethod.runat = 'client';

Person.serverStaticMethod = function() {
log('server static method');
}
Person.serverStaticMethod.runat = 'server';

Person.proxyStaticMethod = function() {
log('proxy static method');
}
Person.proxyStaticMethod.runat = 'server-proxy';

Person.prototype.clientMethod = function() {
log('client method');
};
Person.prototype.clientMethod.runat = 'client';

Person.prototype.serverMethod = function() {
log('server method');
};
Person.prototype.serverMethod.runat = 'server';

Person.prototype.proxyMethod = function() {
log('proxy method');
}
Person.prototype.proxyMethod.runat = 'server-proxy';

此外,假设我能够做到这一点,我如何将它正确地包含到 html 页面中?

最佳答案

我在 Aptana 论坛(网络上不再存在)上发现了一篇帖子,其中指出只能代理全局函数……真可惜。

但是,我一直在尝试,您可以通过将代码放在包含文件中并使用 <script> 来控制客户端和服务器上可用的方法。带有 runat 的标签属性。

例如,我可以创建名为 Person.js.inc 的文件:

<script runat="both">

function Person(name) {
this.name = name || 'default';
}

</script>

<script runat="server">

Person.prototype.serverMethod = function() {
return 'server method (' + this.name + ')';
};

Person.serverStaticMethod = function(person) {
return 'server static method (' + person.name + ')';
}

// This is a proxied function. It will be available on the server and
// a proxy function will be set up on the client. Note that it must be
// declared globally.
function SavePerson(person) {
return 'proxied method (' + person.name + ')';
}
SavePerson.proxy = true;

</script>

<script runat="client">

Person.prototype.clientMethod = function() {
return 'client method (' + this.name + ')';
};

Person.clientStaticMethod = function (person) {
return 'client static method (' + person.name + ')';
}

</script>

我可以使用以下方法将其包含在页面上:

<jaxer:include src="People.js.inc"></jaxer:include>

不幸的是,使用这种方法我失去了浏览器缓存客户端脚本的优势,因为所有脚本都被内联了。我能找到的避免该问题的唯一技术是将客户端方法、服务器方法和共享方法拆分到它们自己的 js 文件中:

<script src="Person.shared.js" runat="both" autoload="true"></script>
<script src="Person.server.js" runat="server" autoload="true"></script>
<script src="Person.client.js" runat="client"></script>

而且,到那时我还不如将代理函数也拆分到它们自己的文件中......

<script src="Person.proxies.js" runat="server-proxy"></script>

请注意,我使用了 autoload="true"在共享脚本和服务器脚本上,以便它们可用于代理函数。

关于javascript - 使用 Jaxer 时定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/109762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com