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)); } }
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); } }