Я нашел сообщение на форумах Aptana (которого больше нет в сети), в котором говорится, что могут быть проксированы только глобальные функции ... Bummer.
Однако я поиграл, и вы можете контролировать, какие методы будут доступны на клиенте и на сервере, поместив ваш код во включаемый файл и используя теги <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"
в сценариях общего доступа и сервера, чтобы они были доступны для прокси-функций.