许多文章(例如msdn)都说当涉及DOM对象和JS对象时,在某些浏览器中无法清除循环引用.
(IE 6根本无法完成,IE7只能在页面请求之间执行):
Javascript Native(Leaks):
function leak(){
var elem = document.createElement("DIV");
document.body.appendChild(elem);
elem.onclick = function () {
elem.innerHTML = elem.innerHTML + ".";
// ...
};
}
Run Code Online (Sandbox Code Playgroud)
因为元素的onload属性通过闭包引用回自身,所以它创建了一个循环引用:
elem [DOM] -> elem.onclick [JS] -> elem [DOM]
JQuery版本(不泄漏):
function leak(){
var elem = $('<div></div>');
$(document.body).append(elem);
elem.click(function () {
elem.html(elem.html() + ".");
// ...
};
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,即使仍有循环引用,jQuery也会阻止所有相关浏览器中发生泄漏:
elem [JS] -> element [DOM] -> elem.onclick [JS] -> elem [JS]
我的问题:如果仍有循环引用,jQuery如何阻止泄漏?
我想创建一个具有子项的自定义/用户控件.
例如,我希望我的控件具有以下标记:
<div runat="server" id="div">
<label runat="server" id="label"></label>
<div class="field">
<!-- INSERT CHILDREN HERE -->
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
当我想在页面上使用它时,我只需:
<ctr:MyUserControl runat="server" ID="myControl">
<span>This is a child</span>
<div runat="server" id="myChild">And another <b>child</b>
</ctr:MyUserControl>
Run Code Online (Sandbox Code Playgroud)
我的用户控件中的子控件将被插入到我的用户控件中.完成此任务的最佳方法是什么?
该功能类似于asp:PlaceHolder,但我想添加更多选项以及其他标记等.子页面控件仍然需要能够被页面访问.(在上面的例子中,页面上应该有myChild控件)
编辑------
它可以是模板控件,只要它允许我引用页面上的子项.
以下是我的问题的SSCCE示例:
// My Library, which I want to take in the user's enum and a template class which they put per-enum specialized code
template <typename TEnum, template <TEnum> class EnumStruct>
struct LibraryT { /* Library stuff */ };
// User Defined Enum and Associated Template (which gets specialized later)
namespace MyEnum {
enum Enum {
Value1 /*, ... */
};
};
template <MyEnum::Enum>
struct MyEnumTemplate {};
template <>
struct MyEnumTemplate<MyEnum::Value1> { /* specialized code here */ }; …Run Code Online (Sandbox Code Playgroud) 我一直负责调查是否为我们的产品使用类型脚本,我的主要目标之一是从类型脚本生成的新脚本应该具有与旧JS相同的签名
我们现有的结构略有命名空间,因为我们有一个基本的Function/namespace,而我们app中的其他模块挂起了基本命名空间.问题是基本命名空间还有一些功能
CompanyName.doSomething = function() {}
CompanyName.module = { doSomethingElse: function() {} }
Run Code Online (Sandbox Code Playgroud)
所以在TS中理想的是,id有一个名为CompanyName的模块,然后在该模块中存在其他类,但是如何处理直接属于该根命名空间的函数,我如何在TypeScript中构建它?
我有2个用户控件,我用作另一个的容器:
<mc:Container runat="server" ID="container">
<mc:MyControl runat="server" ID="test">
</mc:Container>
Run Code Online (Sandbox Code Playgroud)
mc Container有一个名为content的默认内部属性,它是一个集合MyControls.
上面的标记在a里面FormView,当我调用FindControlformview时它可以找到容器,但是找不到测试.
如何使容器控件不创建新的命名容器?
编辑__
当不在a中时FormView,内部控件的ID确实显示为设计器中页面的一部分,因此它正在工作.
编辑__
这是我对容器的vb:
<ParseChildren(True, "Content")> _
Partial Public Class ctrFormContainer
Inherits System.Web.UI.UserControl
Private _content As FormControlCollection
<PersistenceMode(PersistenceMode.InnerDefaultProperty), _
TemplateInstance(TemplateInstance.Single)> _
Public Property Content() As FormControlCollection
Get
Return _content
End Get
Set(ByVal value As FormControlCollection)
_content = value
End Set
End Property
Protected Overrides Sub CreateChildControls()
If _content IsNot Nothing Then
ctrChildren.Controls.Clear()
For Each i As FormControl In _content
ctrChildren.Controls.Add(i) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用此表单在我的文件中读取:
<form name="UploadForm" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose a CSV file to upload: <input name="upload_file" type="file" /><br />
<input type="submit" value="Upload" onClick="uploadFile()" />
</form>
Run Code Online (Sandbox Code Playgroud)
但当我去读取此函数中的值时,我收到一个"cannon find"元素"null null:
function uploadFile() {
var file = document.getElementById('UploadForm').elements['upload_file'].value;
var allTextLines = file.split(/\r\n|\n/);
var headers = allTextLines[0].split(',');
var lines = [];
for (var i=1; i<allTextLines.length; i++) {
var data = allTextLines[i].split(',');
if (data.length == headers.length) {
var tarr = [];
for (var j=0; j<headers.length; j++) {
tarr.push(headers[j]+":"+data[j]);
}
lines.push(tarr);
}
}
alert(lines);
}; …Run Code Online (Sandbox Code Playgroud) javascript ×3
asp.net ×2
c++ ×1
c++11 ×1
csv ×1
jquery ×1
memory-leaks ×1
templates ×1
typescript ×1
visual-c++ ×1