0

我努力学习JavaScript模板,即dustjs的特性“SUBSTR”,但我遇到的问题,我认为这是如此基本的甚至是Google不能回答吧:)遗漏的类型错误:无法读取未定义Dustjs

这里是代码这是最简单的形式

 <button class="getData" onClick="clicker()">Get Data</button> 

     <ul class="vodka"> 
     <script id="vodka" type="text/x-template"> 

     <li>{name}</li> 

     </script> 
     </ul> 

的Javascript

window.addEventListener("load", clicker) 

function clicker() 
{ 
    getData(); 
} 

function getData() 
{ 
var data = {name:"Vodka", degree:97} 
var source = $("#vodka").html(); 
var template = dust.compile(source, "vodkaTemplate"); 
dust.loadSource(template); 
dust.render("vodkaTemplate", data, function(err, res){ 
      $(".vodka").html(res) 
      console.log(res) 
}) 
} 

在初始化过程中模板呈现完美,但点击按钮会导致错误

Uncaught TypeError: Cannot read property 'substr' of undefined

我在做什么错?

+1

请在codepen,plunkr,jsbin或类似网站上提供一个运行示例。 – 2015-02-23 15:43:19

+0

这里,但jsbin一直抛出奇怪的错误 [链接](http://jsbin.com/yukojutumo/1/edit?html,console,output) – 2015-02-23 16:03:44

回答

0

您在加载时(脚本的第1行)呈现模板一次。

当您渲染模板时,将<ul class="vodka">的内容替换为呈现的模板。

但是,无论出于何种原因,您都已将模板源放置在此容器中。模板源在第一次渲染时从DOM中被移除,因为它被渲染的内容所取代。所以,当你尝试呈现模板中的第二次,这条线将sourcenull

var source = $("#vodka").html(); // #vodka does not exist anymore 

和尘埃的错误,因为它试图编译null为模板。

相关问题