我使用KnockoutJS编写了一些自定义绑定.我仍然不确定何时使用ko.utils.unwrapObservable(item)查看代码,该调用基本上检查是否item是可观察的.如果是,则返回值(),如果不是,则返回值.查看Knockout关于创建自定义绑定的部分,它们具有以下语法:
var value = valueAccessor(), allBindings = allBindingsAccessor();
var valueUnwrapped = ko.utils.unwrapObservable(value);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,他们调用observable via (),然后调用ko.utils.unwrapObservable.我只是试图了解何时使用一个与另一个或如果我应该始终遵循上述模式并使用两者.
我有一个带有observableArray(名为"all")对象的视图模型.该对象的一个属性是observable选择的名称.我想要一些代码在数组中子对象的selected属性发生变化时执行.我尝试手动订阅allvia,all.subscribe()但该代码仅在添加或删除项目时触发.我更新了代码,就像这样:
all.subscribe(function () {
ko.utils.arrayForEach(all(), function (item) {
item.selected.subscribe(function () {
//code to fire when selected changes
});
});
});
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?还是有更好的方法?
TortoiseSVN对于VB.NET解决方案有什么最好的SVN忽略模式?
我很确定我使用KO 2.0版本有内存泄漏.我有一个可观察的数组,其中填充了AJAX调用的结果.此集合是数据绑定的,每个集合都有一个DIV容器.数组中的每个对象都有一个绑定到复选框的可观察值.我已经使用Chrome检查了堆,我的结论如下:
如果AJAX调用返回3个元素,则它们在DOM上正确呈现.如果我此时拍摄堆的快照,那里有三个SearchResult对象.如果我再次触发AJAX调用并返回5个元素,则所有5个元素都正确呈现给DOM.但是,如果我在Chrome中拍摄堆的快照并对它们进行比较,则列出的8个元素仍在堆中,所有这些元素都被列为"已添加"而没有列为"已删除".DOM显示始终是正确的,但内存使用只是保持攀爬和攀爬,因为旧的搜索结果永远不会被释放.
任何人都可以帮助我或指出诊断内存泄漏的指针吗?
UPDATE
我已经创建了一个jsFiddle来展示我正在做的事情的要点.我已经把一切都划分了但核心功能,我仍然可以在我的本地机器上运行时复制内存泄漏.显然代码将无法发布,因为它需要命中我的本地服务器来运行搜索.
更新2
我推出了最新的2.1.0.0 Beta版本,泄漏消失了.我不是使用测试版的东西或经典的"只是升级到新版本"修复程序的忠实粉丝.我仍然非常有兴趣知道发生了什么改变或者我做错了什么造成了泄漏.
我已经Git-1.8.3-preview20130601.exe从https://code.google.com/p/msysgit/downloads/list?q=full+installer+official+git安装了Git版本.我还安装了PoshGit,我使用的是Windows PowerShell.
当我启动PowerShell时,我得到了
警告:找不到ssh-agent
我能够进入ssh-agent.exe命令行并启动ssh代理.我也能够完成所有的Git命令,所以我的Git路径可能是正确的.
我一直在按照本指南让Git在Windows中正常工作.
我已经尝试过将他的建议添加$env:path += ";" + (Get-Item "Env:ProgramFiles(x86)").Value + "\Git\bin"到我的Microsoft.PowerShell_profile.ps1文件中,但它没有用.它没有任何区别.我要寻找的建议其他比的解决方案.
为完整起见,这是我的Microsoft.PowerShell_profile.ps1文件
# Load posh-git example profile
. 'C:\Users\________\code\posh-git\profile.example.ps1'
$env:path += ";" + (Get-Item "Env:ProgramFiles(x86)").Value + "\Git\bin"
Run Code Online (Sandbox Code Playgroud) 我想创建一个快速中间件看起来像这样:
function validate (options) {
var defaultOptions = {...}
, validations = _.extend(defaultOptions, options);
return validate (req, res, next) {
/* Use some sort of validation framework where I can pass `validations` into*/
next(someErrors || null)
}
}
Run Code Online (Sandbox Code Playgroud)
我已经看过node-validator和中间件选项以及tracery,但是它们看起来都不像你可以将"规则集"传递给它们并让它们针对提供的输入运行规则.
有没有人对如何使用这些模块或我还没有找到的另一个模块有任何建议?我是否必须自己动手才能做到这一点?
UPDATE
这确实是为了验证表格帖子.我知道不会有一个中间件会覆盖整个网站的所有帖子; 这将仅用于某些路线.我想要可重用的中间件,因为我们正在制作具有通用路由的API,并期望我们希望以类似的方式验证常见的表单体,并且可以选择在每个API的基础上进行调整.
我正在尝试使用标签构建一个单选按钮列表,以便您可以单击标签来检查单选项.我在Chrome中运行得很好,但不是IE7.得到吐出的HTML似乎是正确的,但当我点击标签时,相应的单选按钮不会被选中.
JavaScript的
function ReuqestType(id, name, billable) {
this.id = id;
this.name = name;
this.billable = billable;
}
function RequestViewModel() {
var self = this;
self.availableRequestTypes = [
new ReuqestType(1, "Travel", true),
new ReuqestType(2, "Bill Only", false),
new ReuqestType(3, "Both", true)
];
self.selectedRequestType = ko.observable();
}
Run Code Online (Sandbox Code Playgroud)
HTML
Request Type
<br />
<!-- ko foreach: availableRequestTypes -->
<input type="radio" name="requestType" data-bind="value:id, attr: {'id': 'rt'+ id}" />
<label data-bind="text: name, attr:{'for':'rt'+id}">
</label>
<!-- /ko -->
Run Code Online (Sandbox Code Playgroud)
这样做的首选方法是什么?
我知道JSLint只是一个指南,你应该把它所说的用一些盐,但是,我很好奇我怎么能解决这个警告而不重写整个功能.这是感兴趣的功能:
function randomString(length) {
var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split(''),
str = '',
i;
if (!length) {
length = randomNumber(chars.length);
}
for (i = 0; i < length; i++) {
str += chars[randomNumber(chars.length)];
}
return str;
}
Run Code Online (Sandbox Code Playgroud)
JS Lint告诉我"JS Lint:使用数组文字符号[]." 它指向的是string.split().如何在不重写整个函数的情况下满足JSLint?它甚至可能吗?
我知道还有其他方法可以生成随机字符串; 我对如何使用此方法解决JSLint警告感兴趣.
我想重用调试器工具栏中使用的“播放”按钮图标作为我从扩展添加的新菜单项。
有没有办法在“package.json”中设置图标信息以使用 VSCode 中已有的 svg 或者我必须提供自己的扩展?
我试图在JavaScript中实现一定程度的继承,这是我到目前为止所拥有的:
function Address() {
this.address1 = ko.observable();
this.address2 = ko.observable();
this.country = ko.observableSafe(null, new Country(-1, '', false));
this.city = ko.observable('');
this.state = ko.observable();
this.province = ko.observable('');
this.zipCode = ko.observable();
this.countryLookupID = '';
this.stateLookupID = '';
ko.computed(function () {
var newCountry = this.country();
if (newCountry) {
this.countryLookupID = newCountry.id.toString();
if (newCountry.international) {
this.clearDomestic();
}
else {
this.clearInternational();
}
}
else {
this.countryLookupID = "";
}, this);
ko.computed(function () {
var newState = this.state();
if (newState) {
this.stateLookupID = newState.id.toString();
}
else …Run Code Online (Sandbox Code Playgroud) javascript ×5
knockout.js ×5
data-binding ×1
express ×1
git ×1
jslint ×1
memory-leaks ×1
middleware ×1
node.js ×1
oop ×1
powershell ×1
radio-button ×1
svn ×1
tortoisesvn ×1
validation ×1
vb.net ×1