我想要一些伪代码或白板建议允许在我的网站上进行未经身份验证的投票.我已经查看了这个主题的相关主题,但我认为我的方案不同,足以保证自己的主题.
有3分核心的情况我想支持.
1)经过身份验证的用户"Joe Blow"登录到我的网站并投票.由于他经过身份验证,他只能投票一次.对于他所做的每一次投票,我将他的UserId存储在数据库中
2)未经身份验证的用户"Sally"访问我的网站并投票.由于她未经身份验证,我将在一个名为"Anonymous-Users-From-My-Site"的用户帐户下保存她的投票.
3)未经身份验证的用户"Zoltan"使用我构建的小部件来从托管我的小部件的其他合作伙伴网站访问我的网站.他也可以从该网站投票.我将在名为"Anonymous-Users-From-A-Partner-Site"的合作伙伴用户帐户下保存他的投票.
这里的转折是我需要支持"莎莉"和"佐尔坦"投票无限数量的能力.也许莎莉想在一天内投票500件事.也许Zoltan想在合作伙伴网站上投票200件事.也许Sally没有重新访问该网站一个月,然后回来投票更多的东西.
如何使用cookie实现方案2和3?我是否一起散列所有项目ID的投票?我有什么选择?
FWIW:我计划在统计选票时做出严格的区分.我会明确表示,匿名投票就是这样 - 匿名.在查看结果时,人们会理解使用一定程度的怀疑态度.但我仍然认为允许未经身份验证的用户投票是有价值的,即使他们可以通过使用多个浏览器来游戏系统或在每次投票后删除他们的cookie.如果用户在我的网站上投票必须至少做到这一点,那么我会满意的.
最后:我对使用像EverCookie这样的东西不感兴趣.根据我的需要,这是完全矫枉过正的.
我有以下工作代码,使用Knockout来确定在2012年总统选举中呈现状态的颜色.如果状态值为1(共和党人),则颜色为红色.如果状态值为2(民主党人),则颜色为蓝色.如果状态值为3(Toss Up),则颜色为黄色.
<div class="el-clickable" data-bind="css: {
'el-republican': model.ny()===ip.constants.electoralStatusValue.republican,
'el-democrat': model.ny()===ip.constants.electoralStatusValue.democrat,
'el-tossup': model.ny()===ip.constants.electoralStatusValue.tossUp
}"
state-abbrev="ny" style="top:26px;left:442px;height:102px;width:54px;" title="New York">
<div style="margin-top:46px;">NY</div></div>
<div class="el-clickable" data-bind="css: {
'el-republican': model.pa()===ip.constants.electoralStatusValue.republican,
'el-democrat': model.pa()===ip.constants.electoralStatusValue.democrat,
'el-tossup': model.pa()===ip.constants.electoralStatusValue.tossUp
}"
state-abbrev="pa" style="top:107px;left:372px;height:65px;width:65px;" title="Pennsylvania">
<div style="margin-top:23px;">PA</div></div>
Run Code Online (Sandbox Code Playgroud)
问题是,这似乎是一个强力解决问题的方法,因为我需要有3个单独的CSS绑定调用才能获取单个CSS选择器.也就是说,我需要在我的选举大学地图上检查每个州的共和党人,民主党人和共和党人.
(现实世界的情况更糟糕,因为我实际上检查的是共和党人,倾向于共和党人,民主党人,倾向民主党人,未定,折腾和锁定!)
http://www.ipredikt.com/contests/election2012
我真正想要的是通过调用实用程序函数并传入状态值来实现此目的的方法,如下所示:
data-bind="css: getStateColor(model.pa())" // for Pennsylvania
Run Code Online (Sandbox Code Playgroud)
这是否适用于'attr'绑定?
我经常觉得CSS绑定机制:'string-literal',true | false 是非常严格的.我希望Knockout也支持以下内容:
data-bind="css: myFunction(myParam)"
Run Code Online (Sandbox Code Playgroud) 我有一个第三方的jQuery控制下面的代码名为jquery.facebox.js是JSLint的不喜欢.这在RegEx中是一个糟糕的擒纵机构错误.
正则表达式对我来说就像Romulan,所以我看不出如何修复错误(这与RegEx中的句点字符有关):
var imageTypes = $.facebox.settings.imageTypes.join('|');
$.facebox.settings.imageTypesRegexp = new RegExp('\.(' + imageTypes + ')$', 'i');
Run Code Online (Sandbox Code Playgroud) 我已经成功地将CKEditor集成到我的项目中,并且刚刚构建了我的第一个"Hello,world!" 类型插件.该插件在"wysiwyg"模式下运行良好,但只要切换到"源"模式,插件就会自动禁用.
我没有任何强制措施能够保持启用插件按钮.我知道这是可能的,因为默认情况下,对于所见即所得和源模式都启用了CKEditor中的"全选"和"关于"工具栏按钮.
我已经看到对工具栏项的"模式"设置的引用,但是无法发现所需的语法.这是我通过编辑自己的customConfig文件尝试的一个不成功的例子:
config.toolbar = [
{ name: 'custom', items: ['HelloWorld'], modes: { wysiwyg: 1, source: 1 } },
{ name: 'about', items: ['About'] }
];
Run Code Online (Sandbox Code Playgroud)
这也不起作用:
config.toolbarGroups = [
{ name: 'custom', modes: { wysiwyg: 1, source: 1 } },
{ name: 'about' }
];
Run Code Online (Sandbox Code Playgroud)
如何为两种模式启用CKEditor插件工具栏按钮?
我注意到使用IE8和IE9,如果我使用带有POST和PUT谓词的jQuery.ajax()调用我的RESTful API ,那么我不会在jqXHR中找回任何响应头.但是,GET请求按预期工作.
此行为与所有其他浏览器不同.我已经确认Chrome,FF,Opera和Safari都会在POST和PUT请求的响应中返回完整的预期标头集.只有IE8和IE9似乎在地板上扔标题.(我没有检查的一件事是HEAD请求会发生什么.)
我已经用Fiddler验证了标题实际上是通过线路进行的,所以问题出在jQuery本身或IE8和IE9上.
这是一个已知的问题?如果是这样,是否有解决方法.我可以在jQuery中重载/覆盖某些内容以保留POST和PUT后的头文件吗?我目前的解决方法是在成功回调中使用GET简单地重新获取修改后的数据,因为IE8和IE9不会混淆GET操作的头文件.
这是我基于jQuery的主要AJAX工作方法的片段:
$.ajax({
url: String.format(um.proxy.url, url),
type: ajaxParams.verb,
contentType: "application/json; charset=utf-8",
dataType: "json",
data: String.format('{0}', ajaxParams.jsonData),
headers: mapOfHeaders,
success: function (data, textStatus, jqXHR) {
//...
},
error: function (msg, textStatus, errorThrown) {
//...
}
});
Run Code Online (Sandbox Code Playgroud) 我马上说,我知道由于安全限制,这是不可能的,但这是我的情况,我正在寻找一些我可能没有考虑过的创造性解决方法.
我有一个显示图像缩略图的网站.当用户点击缩略图时,我使用jQuery叠加控件(FaceBox)在弹出窗口中显示完整大小的图像.弹出窗口的顶部始终位于距页面顶部20个像素的位置,因此需要读取页面的scrollTop()值.
当我直接访问我的网站时,此功能非常有用.但是当我从IFRAME中的Facebook Canvas应用程序加载网站时,弹出窗口的定位代码会中断.我已关闭Canvas的滚动条,并使用FB.Canvas.setSize(...)手动通知我的IFRAME中高度更改的父页面.由于我不允许访问父级中的ScrollTop()值,因此我的解决方法是将叠加层的顶部相对于源缩略图的顶部进行定位.这使叠加层保持靠近源,但它并不理想,特别是如果缩略图靠近视口的底部.
有什么方法可以将弹出窗口从IFRAME的顶部放置20个像素,但不知何故考虑到父窗口的(禁止的)ScrollTop()位置?
这似乎是一种相当常见的情况; 我希望Facebook计划在未来解决这个问题.该FB.Canvas.getPageInfo物体看起来像一个很好的候选人这一点.它有一个scrollTop成员,但它适用于Canvas,而不是父框架,如果关闭滚动条,则此值始终为零.
我喜欢将我的所有JQuery函数和事件接收器扩展到$(window).load,如下所示:
$(window).load(function ()
{
function Foo(id)
{
alert(String.format("Do Foo for: {0}", id));
}
});
Run Code Online (Sandbox Code Playgroud)
通常,我在这个范围内完成所有工作,但我有一个案例,我想从一个独立的JQuery小部件构建的HREF中调用Foo(27).HREF看起来像这样:
<a href="javascript:Foo(27)">Click me!</a>
Run Code Online (Sandbox Code Playgroud)
但是,单击链接时找不到Foo()函数.我怎么能这样做?
[编辑]
所以,我刚接受了下面的答案,并希望分享我的最终实施.Foo()已被我正在使用的实际方法的名称所取代.是的,我知道String.format()本身不存在; 它是我自己的基础库的一部分.考虑到这一点,这就是我所拥有的.这是我定义所有全局命名空间的文件.该定义存在于jQuery范围之外.
// This is defined in the global namespace
if (typeof (window.App) === "undefined")
{
window.App = {};
}
Run Code Online (Sandbox Code Playgroud)
这是构建HREF的jQuery小部件中的一行.标题用于预测,HREF导航到该预测的详细信息页面:
r = String.format('<a href="javascript:App.NavDetails({1});" class="link3">{0}</a>',
Predikt.General.EncodeHtml(options.rowData.Title),
options.rowData.PredictionId);
Run Code Online (Sandbox Code Playgroud)
这是我的$(window).load() - 范围的jQuery文件中的NavDetails函数的实际实现:
$(window).load(function ()
{
App.NavDetails = function (id)
{
// Do something interesting with the ID here...
alert(String.format("The ID is: {0}", id));
};
});
Run Code Online (Sandbox Code Playgroud)