Sli*_*lim 3 html javascript jquery knockout.js
我有这个简单的div:
<div id="mainContent">
</div>
Run Code Online (Sandbox Code Playgroud)
它是空的.现在我想把它附加HTML到上面的div:
<div id="mainContent">
<label>Project Name</label>
<input type="text" id="projectName" data-bind="value: projectName"/>
<label>Tracker Name</label>
<input type="text" id="trackerName" data-bind="value: trackerName"/>
</div>
<button type="submit" data-bind="click: submitNewProject">Submit</button>
Run Code Online (Sandbox Code Playgroud)
通过使用:
$.ajax({
type : 'POST',
url : 'newTracker.php',
dataType : 'html',
success : function(data){
$("#mainContent").html(data);
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
alert('Something is wrong!');
}
});
Run Code Online (Sandbox Code Playgroud)
哪里data是HTML我试图通过分配:$("#mainContent").html(data);
起初看起来一切都很漂亮,但是有一个问题 - 绑定不起作用.
我的意思是,在新分配的HTML我有一个按钮应该调用viewmodel函数,但它不...
但是,如果我将代码直接放在div中,绑定就像魅力一样.
当我HTML在div中分配新代码时,为什么我的出价不起作用?我知道我错过了一些非常小而基本的东西,但我无法发现它.
编辑:
按钮事件:
submitNewProject = function(){
console.log("submit new project");
};
Run Code Online (Sandbox Code Playgroud)
Knockout无法跟踪新创建的元素,如果使用Ajax方法更改DOM,则必须将视图模型显式绑定到新创建的元素.
就像是:
$.ajax({
type: 'POST',
url: 'newTracker.php',
dataType: 'html',
success: function (data) {
var $mainContent = $("#mainContent");
$mainContent.html(data);
var existingViewModel = ko.dataFor(document.body);
ko.applyBindings(existingViewModel, $mainContent.get(0));
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert('Something is wrong!');
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1777 次 |
| 最近记录: |