Ejemplo n.º 1
0
        protected internal string Render(object value, string templateScript)
        {
            try
            {
                string        json   = value.ToJson();
                StringBuilder script = CreateBaseScript();
                script.Append("dust.loadSource(compiledSource);");
                script.Append(@"dust.render(templateName, JSON.parse(jsonData), function(err, result){
    error = err;
    output = result;
})");

                EcmaScript.NET.Context ctx   = EcmaScript.NET.Context.Enter();
                ScriptableObject       scope = ctx.InitStandardObjects();
                SetParameters(scope);
                ScriptableObject.PutProperty(scope, "jsonData", json);
                ScriptableObject.PutProperty(scope, "compiledSource", Regex.Unescape(templateScript));
                ScriptableObject.PutProperty(scope, "error", null);
                ScriptableObject.PutProperty(scope, "output", "");

                ctx.EvaluateString(scope, script.ToString(), "render", 0, null);

                object error = ScriptableObject.GetProperty(scope, "error");
                if (error != null)
                {
                    throw new InvalidOperationException("An error occurred during dust.render: " + error.ToString());
                }

                string result = ((string)ScriptableObject.GetProperty(scope, "output"));
                return(Regex.Unescape(result));
            }
            catch (Exception ex)
            {
                string sig = "An error occurred rendering template ({0}) : {1}";
                string msg = ex.Message;
                this.Exception = Args.Exception <DustException>(sig, Name, msg);
                return(string.Format(sig, Name, msg));
            }
        }
Ejemplo n.º 2
0
        private void SetCompiledScript()
        {
            try
            {
                StringBuilder script = CreateBaseScript();
                script.Append("compiledTemplate = dust.compile(templateSource, templateName);");

                EcmaScript.NET.Context ctx = EcmaScript.NET.Context.Enter();

                ScriptableObject scope = ctx.InitStandardObjects();
                SetParameters(scope);
                ScriptableObject.PutProperty(scope, "compiledTemplate", null);

                ctx.EvaluateString(scope, script.ToString(), "Compile", 0, null);
                CompiledScript = (string)ScriptableObject.GetProperty(scope, "compiledTemplate");

                SetCompiledTemplate();
            }
            catch (Exception ex)
            {
                CompiledScript = string.Format("alert('An error occurred compiling {0}: {1}');", Name, ex.Message);
                Exception      = Args.Exception <DustException>("An error occurred compiling script ({0}) :{1}", ex, Name, ex.Message);
            }
        }