【问题标题】:Why is the template not getting rendered?为什么模板没有被渲染?
【发布时间】:2011-06-21 16:23:25
【问题描述】:

我想知道为什么没有附加 li

<! DOCTYPE html>
<html>
<head>
    <title>Trying out knockout</title>
    <script type="text/javascript" src="jquery-1.4.4.js"></script>
    <script type="text/javascript" src="jquery.tmpl.js"></script>
    <script type="text/javascript" src="knockout-1.1.2.debug.js"></script>      
    <script type="text/javascript">
        var viewModel ={
            personName:ko.observable('Stan Marsh'),         
            personAge:ko.observable(28),
            grades:[
                    {subject:"Math",grade:'A'},
                    {subject:"Physics",grade:'B'},
                    {subject:"Chemistry",grade:'A'},
                    {subject:"Biology",grade:'A'}
            ]           
        };      


    $(document).ready(function (){      
        // Apply knockout bindings
        ko.applyBindings(viewModel);
        // Apply templates          
        function renderList() {
          $("#tmplGrades").tmpl(viewModel.grades).append("#ulGradeList"); 
        };      
        // Event Wireup
        $('#btnViewChanges').click(function(){
        var message = "New Name:"+viewModel.personName()+" and New Age:"+ viewModel.personAge();
            alert(message);

        });

    });

    </script>
    <script id="tmplGrades" type="text/html">
    {{each viewModel.grades}}<li>Subject: ${subject} , Grade: ${grade}</li>
    </script>   
</head>
<body>
    <fieldset>
        <legend>Person</legend>
        <p>
            <label for="tbPersonName">Name:</label>
            <input type="text" id="tbPersonName" data-bind="value:personName" />
        </p>
        <p>
            <label for="tbAge">Age:</label>
            <input type="text" id="tbAge" data-bind="value:personAge" />
        </p>
        <input type="button" id="btnViewChanges" value="View Changes"/>
    </fieldset>
    <ul id="ulGradeList">

    </ul>
</body>
</html>

【问题讨论】:

    标签: jquery jquery-templates knockout.js


    【解决方案1】:
    $("#tmplGrades").tmpl(viewModel.grades).append("#ulGradeList"); 
    

    我想你的意思是appendTo 不是append

    append 将内容附加到选定的元素,而appendTo 将选定的内容附加到选择器中指定的元素。

    【讨论】:

      【解决方案2】:

      这是一个有效的示例:http://jsfiddle.net/rniemeyer/ztgfG/

      看起来,在您的代码中,模板渲染是在一个名为 renderList() 的函数中,该函数未被调用。此外,如果您将数组传递给模板渲染,它将自动为数组中的每个项目执行此操作,因此您不需要使用 {{each}}。

      JSFiddle 上的示例还展示了如何使用模板绑定让 Knockout 为您呈现模板。这样,您根本不必进行 .tmpl 调用。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-23
        • 1970-01-01
        • 2013-07-10
        • 2013-11-14
        • 2019-05-15
        • 2018-01-10
        • 2014-01-21
        相关资源
        最近更新 更多