0

这是我目前正在处理的代码

<html>
<head>
@using MvcJqGrid;
@using System.IO;
@using System.Web.Mvc;
@{
    Layout = "";   
    }

<link rel="Stylesheet" type="text/css" href="Content/themes/base/jquery-ui.css" />
<link rel="Stylesheet" type="text/css" href="Content/themes/base/jquery.ui.base.css" />
<link rel="Stylesheet" type="text/css" href="Content/themes/base/jquery.ui.theme.css" />
<link rel="Stylesheet" type="text/css" href="Content/ui.jqgrid.css" />

<script type="text/javascript" src="Scripts/modernizr.custom.05850.js"></script>
<script type="text/javascript" src="Scripts/jquery-1.7.2.js" > </script>
<script type="text/javascript" src="Scripts/jquery-ui-1.8.19.js"> </script>
<script  type="text/javascript"  src="Scripts/grid.locale-en.js" ></script>
<script   type="text/javascript" src="Scripts/jquery.jqGrid.min.js"></script>
<script type="text/javascript" src="Scripts/json2.min.js"></script>
<script type="text/javascript" src="Scripts/knockout-2.1.0.js"></script>

</head>
<body>
<!-- This is a *view* - HTML markup that defines the appearance of your UI -->

<p>View Name: <input data-bind="value: sharepointView().Name" /></p>
<p>No Of Results: <input data-bind="value: sharepointView().noOfResultsPerPage"/></p>
<p id='filterEnable' >Filter Expression:Test</p>
<p id='addFilterExpression' >add Filter</p>
<div id='filterExpression'>   
<ul id='filterElements'>
</ul>
</div>

<script type="text/javascript">
    function AppViewModel() {
       //model binding dude
       this.sharepointView=ko.observable(@Html.Raw(PseudoSharepointView.getAView()));

       this.myOptions=(@Html.Raw(PseudoSharepointView.getAllVariables()));
    }

    // Activates knockout.js
    ko.applyBindings(new AppViewModel());
</script>
<script type="text/javascript">

    $('#filterEnable').click(function () {
        $('#addFilterExpression').slideToggle('slow', function () {
            // Animation complete.
        });
    });

    $('#addFilterExpression').click(function () {

  $('#filterElements').append('<li>').append('<p>').html(" 
 <select data-bind='options: $root.myOptions'></select>
          ");
    });
</script>
</body>
</html>

现在“选择”的东西似乎让我头疼

当它按原样放入体内时工作正常

但是当我尝试使用 jquery 函数插入相同的内容时,我只得到一个空的下拉列表....

4

1 回答 1

0

您的 javascript 只是作为呈现的页面运行。尝试将您的 javascript 放入document.ready处理程序并重新排序您的函数调用:

<script type="text/javascript"> 
$(function () {
    var viewModel = null;
    function AppViewModel() { 
       //model binding dude 
       this.sharepointView=ko.observable(@Html.Raw(PseudoSharepointView.getAView())); 

       this.myOptions=(@Html.Raw(PseudoSharepointView.getAllVariables())); 
    } 

    $('#filterEnable').click(function () { 
        $('#addFilterExpression').slideToggle('slow', function () { 
            // Animation complete. 
        }); 
    }); 

    $('#addFilterExpression').click(function () { 

       $('#filterElements').append('<li>').append('<p>').html("<select data-bind='options: $root.myOptions'></select>"); 
       ko.applyBindings(viewModel, document.getElementById("filterElements"));
    }); 

    // Activates knockout.js 
    viewModel = new AppViewModel(); 
    ko.applyBindings(viewModel);
});

</script> 

更新:您还需要调用ko.applyBindings任何新创建的指定data-bind属性的 DOM 元素。见上面的$('#addFilterExpression').click函数

于 2012-05-15T12:37:24.397 回答