我正在使用knockout和rails 4构建一个Web应用程序.我有一个家庭控制器来提供主要的htmls和javascripts.在application.js.erb里面我声明了我的viewModel:
var appViewModel = function appViewModel(){
var self = this;
self.navLinks = ['whoarewe','business'];
}
$(document).ready(function() {
ko.applyBindings(new appViewModel());
});
Run Code Online (Sandbox Code Playgroud)
home/index.html.erb看起来像这样:
<div class="app_navbar">
<ul class="navLinks">
<!--ko foreach:navLinks-->
<li><a data-bind="text: $data"></a></li>
<!--/ko-->
</ul>
</div>
<%= video_tag "Student_Resume1.mp4", :size => "320x240", :controls => true, :autobuffer => true %>
Run Code Online (Sandbox Code Playgroud)
当我通过正常的浏览器请求(从URL文本框输入)或刷新从服务器请求页面时,它工作正常.我的问题是当我切换到另一个页面并使用浏览器历史记录返回到home/index(定义了敲除模型)时,我得到没有敲除绑定的html.
有什么我可以忽略的吗?
更新:
在调试之后(做回历史记录)我能够看到document.ready方法被调用以及applyBindings方法,加载所有的敲除绑定.
看起来并非所有静态内容都被加载,就像图像一样.只有在jQuery completed()方法完成后,才会加载缺少的静态内容并撤消所有绑定.
更新2:
在挖掘了一些之后(二进制搜索html,每次删除一半代码以查看包是否被移除)我发现从我的html中删除一些元素解决了问题(引导选项卡和视频标记).有意义的是,选项卡可能会导致引导程序中出现未报告的错误,但我无法理解的是视频标记导致错误的原因.视频标记非常简单:
<video>
<source src="/assets/Student_Resume1.mp4" type='video/mp4' />
</video>
Run Code Online (Sandbox Code Playgroud)
删除它解决了问题; 添加它会产生某种错误(我假设).当仅使用历史记录时(仅),视频未显示且敲除绑定失败.
更新3:
删除视频标记也无法解决问题,只会降低发生的可能性.这让我觉得它可能是由于页面过载或某种竞争条件造成的.
更新4:
我注意到从chrome控制台窗口再次调用ko.applyBindings,重新绑定绑定没有问题.因此尝试将applyBindings移动到$(window).load但没有成功.
更新5:
我也注意到视频标签在历史记录之后无法正常工作.chrome中的网络选项卡有3个视频请求.2获得了以下响应304 Not Modified,而第3个没有重播.
更新6:
在使用更多浏览器进行测试后,看起来它在firefox中没有发生.视频也没有加载,因为firefox不支持mp4.
我是haskell,功能语言和monad的新手.
我一直在乱搞这个约一个月; 我已经读过
你了解一个haskell
并且正在试图制作我的haskell网站.
但有些东西困扰着我:monads抽象.如果我理解正确,monad是可以排序的"数据容器".我可以用">> ="解压缩它,例如"幕后工作"将为我做更多工作,所以如果我没有monad定义,我必须猜测它将如何被解压缩.
例如:
我们有列表monad,解压缩它将对其元素进行排序
[1,2,3] >>= return . (+1) -- gives back [2,3,4]
Run Code Online (Sandbox Code Playgroud)
或者像这些例子中的作家那样更复杂的monad: Log Writer Monad
或者我可能有一个webWriter monad,对于每个'解包'它的值,它会向一些远程服务器发送请求(我不确定这个,但我试图给出一个极端的情况)
我的问题是:我是否可以通过查看monad用户界面(我猜是类型定义)告诉应用函数('>> =','applyLog')在幕后做什么?
希望我能很好地解释自己.
谢谢,奥伦.
我需要在视图/验证函数内获取 Couchdb 服务器中所有数据库的列表。
是否有我可以在函数内部使用的 CouchDb 预定义函数(如发射)?
我知道我可以做 http 请求来获得这个,比如:
“http://server/_all_dbs”
但它真的很乱。
谢谢奥伦。
我创建了一个基类来帮助我减少C#中不可变对象初始化的样板代码,
我正在使用延迟初始化以尽量不影响性能,我想知道我通过这样做影响性能有多大?
这是我的基类:
public class ImmutableObject<T>
{
private readonly Func<IEnumerable<KeyValuePair<string, object>>> initContainer;
protected ImmutableObject() {}
protected ImmutableObject(IEnumerable<KeyValuePair<string,object>> properties)
{
var fields = GetType().GetFields().Where(f=> f.IsPublic);
var fieldsAndValues =
from fieldInfo in fields
join keyValuePair in properties on fieldInfo.Name.ToLower() equals keyValuePair.Key.ToLower()
select new {fieldInfo, keyValuePair.Value};
fieldsAndValues.ToList().ForEach(fv=> fv.fieldInfo.SetValue(this,fv.Value));
}
protected ImmutableObject(Func<IEnumerable<KeyValuePair<string,object>>> init)
{
initContainer = init;
}
protected T setProperty(string propertyName, object propertyValue, bool lazy = true)
{
Func<IEnumerable<KeyValuePair<string, object>>> mergeFunc = delegate
{
var propertyDict = initContainer == null ? ObjectToDictonary () …
Run Code Online (Sandbox Code Playgroud) 我的抽象目标是:
1)创建一个CRUD API,它是带有CRUD接口的第三方库的包装器(可以来自服务对象和/或实体对象)
2)每个CRUD方法应根据预定义的类型定义限制输入的类型(一种类型可以输入多种方法)
3)当用户选择特定类型的方法时,他应该被迫根据所选类型插入正确类型的其他参数(如键),并且应该在编译时验证这些参数(将键作为对象类型传递需要运行时)评估对象的"真实"类型.
4)方法的类型是第三方接口,不在我的控制之下,我无法改变它们.
5)API对于用户来说应该是直截了当的,并且用户的样板代码量较少.
我发现在C#中解决这个问题的一种方法是:
public interface Update<T,TKey> {}
public interface Add<T> {}
public interface Delete<T,TKey> {}
public interface Get<T,TKey> {}
public class Invoice:Get<string>, Add<ThirdPartyInvoice>, Update<ThirdPartyInvoice,string> {}
//More types can come here...
public static class CRUDAPI
{
public static T Get<T,TKey>(Get<T,TKey> type, TKey key)
{
//will get a T from a service object based on TKey
}
public static Unit Add<T>(Add<T> type, Func<T,T> select)
{
//will get a new instance of T and will feed it to …
Run Code Online (Sandbox Code Playgroud) 我试图用c#中的monad替换异常时遇到了这个死胡同.这让我想到可能不仅是语言特定的问题和更多与技术相关的缺失特征.
让我试着在全球范围内重新解释一下:
鉴于:
我想要:
在方法的惰性列表参数上应用函数(LINQ select,map ...)并将获取列表中的每个元素(懒惰)并执行可能失败的计算(抛出异常或返回Error/Either).
仅在第三方函数"内部"使用的列表,我不希望必须迭代每个元素一次.
有了异常/副作用,这可以通过从select,map函数抛出异常来轻松实现,如果发现错误,这将停止在第三方函数"内部"执行.然后我可以处理它之外的异常(没有第三方"意识到我的错误处理"),将错误处理的责任留给我.
在使用Either时,似乎不可能在不改变第三方功能的情况下获得相同的行为.直觉上我试图将列表从Eithers列表转换为列表中的任何一个,但这只能通过使用函数列表来完成.喜欢,聚合或减少(Haskell的序列函数是否相同?).
所有这些导致我的问题是Maybes/Eithers或Error作为返回类型,错过了这种行为?还有另一种方法可以与他们达成同样的目的吗?
c# ×3
haskell ×2
couchdb ×1
database ×1
either ×1
exception ×1
f# ×1
function ×1
generics ×1
html5 ×1
immutability ×1
javascript ×1
jquery ×1
knockout.js ×1
linq ×1
monads ×1
polymorphism ×1
reflection ×1
view ×1