рельсы to_json всегда с двойной кавычкой, как я могу их удалить? - PullRequest
0 голосов
/ 28 декабря 2010

говорят, что у меня есть такой хеш {{onDoubleClick ”=>« function (e) {alert (e.message);} "}, как я могу получить функцию вместо строки, когда получаю json на клиенте.

вот так:

{"onDoubleClick": function (e) {alert (e.message);}}

я пытался поставить# в начале, но не работает. {"onDoubleClick" => "# function (e) {alert (e.message);}"}

кто-нибудь сталкивался с этой проблемой раньше?спасибо

Ответы [ 3 ]

2 голосов
/ 28 декабря 2010

Если возможно, вы должны вывести его как буквальную функцию с сервера, а не как строку. Это сэкономит вам parse-as-string и затем eval () на клиенте.

Если невозможно вывести буквальную функцию, вы можете вызвать для нее функцию eval (), чтобы превратить ее в функцию. Если переменная с именем o хранит результат JSON, вы можете запустить:

o["onDoubleClick"] = eval(o["onDoubleClick"]);

чтобы вычислить строку в функции и сохранить ее обратно в той же переменной.

1 голос
/ 09 января 2011

Чтобы обойти эту проблему, я создал объект для хранения «не заключенных в кавычки» элементов Javascript, таких как выходные данные функции, а затем добавил «to_javascript» в Hash, который использует версию без кавычек в объектах, которые делают ее доступной.

Например, это работает для меня: параметры [: управления] = { : bold => {: visible => true}, : italic => {: visible => true}, : underline => {: visible => true}, : insertUnorderedList => {: visible => true}, : lol => { : visible => true, : exec => JavascriptUnquoted.new ("function () {$ ('## {html_id}'). wysiwyg ('insertImage', '/images/lol_emoticon.jpg');}") }

options.to_javascript ==> {"controls": {"курсив": {"visible": true}, "подчеркивание": {"visible": true}, "insertUnorderedList": {"visible": true} , "lol": {"visible": true, "exec": function () {$ ('# review_text'). wysiwyg ('insertImage', '/images/lol_emoticon.jpg'); }}}

https://gist.github.com/771749

0 голосов
/ 28 декабря 2010

Попробуйте использовать eval ():

var key = "OnDoubleClick";
var value = "function(e){alert(e.message);}";
eval("var " + key + "=" + value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...