2012-05-30 1 views
1

Я работаю с Dust.js и Node/Express. Dust.js документирует функции контекстных помощников, где помощник встроен в данные модели как функцию. Я добавляю такую ​​функцию в мою модель данных JSON на сервере, но ответ JSON на браузер не обладает свойством функции (т. Е. Из приведенной ниже модели возвращаются prop1 и prop2, но свойство-помощник отсутствует.Как добавить помощник контекста к базе Dust.js на сервере и клиенте

/* JSON data */ 
model: { 
    prop1: "somestring", 
    prop2: "someotherstring", 
    helper: function (chunk, context, bodies) { 
     /* I help, then return a chunk */ 
    } 
/* more JSON data */ 

Я вижу, что JSON.stringify (вызванный response.json()) удаляет свойство функции. Не уверен, что я могу избежать использования JSON.stringify, поэтому потребуется альтернативный метод совместного использования этой вспомогательной функции между сервером/клиентом Вероятно, есть способ добавить вспомогательные функции в базу пыли на сервере и на клиенте. Это то, что я ищу. Поскольку документы Dust разрежены, это не документировано. Кроме того, я не могу найти код которые демонстрируют это.

Спасибо за любую помощь.

+0

Вы можете посмотреть на nowjs – ControlAltDel

+0

Вы можете отправить помощника отдельно от сервера, когда сервер делает вид. Поскольку помощник обычно статичен, вам не нужно передавать его каждый раз, когда клиент отправляет запрос AJAX на сервер. Функция будет отправлена ​​правильно, если рендеринг на сервере. – sntran

ответ

-1

Если вы хотите ограничить сохранение функций, вы можете использовать следующий код.

JSON.stringify(model, function (key, value) { 
    if (typeof(value) === 'function') { 
    return value.toString(); 
    } else { 
    return value; 
    } 
}); 

Это, вероятно, не делает то, что вы хотите. Скорее всего, вам нужно переопределить функцию на клиенте или использовать технологию, например nowjs.

2

отправить хелперы в отдельном файле - определить их в базовом контексте в пыли, как так:

base = dust.makeBase({foo:function(){ code goes here }}) 

то каждый раз вы называете свои шаблоны, сделать что-то вроде этого:

dust.render("index", base.push({baz: "bar"}), function(err, out) { 
    console.log(out); 
}); 

, что это в основном заключается в том, что он объединяет контекст вашего шаблона в базу, что похоже на «глобальный» контекст. не беспокойтесь слишком много о том, что вы нажимаете слишком много - каждый раз, когда вы нажимаете, база воссоздает новый контекст с предоставленным вами контекстом. И глобальный контекст - помощники и любые переменные, которые вы определили при вызове makeBase.

надеюсь, что это помогает

 Смежные вопросы

  • Нет связанных вопросов^_^