media-choice为媒体资源选择组件,基于KnockoutJs。支持图片、语音、视频、图文的选择以及预览,支持默认选择类型,支持是否禁用选择类型的更改。

使用示例:

<script id="media_idTemplate" type="text/html">

<media-choice-button params="value: media_id"></media-choice-button>

</script>

<script id="newsTemplate" type="text/html">

<media-choice-button params="value: media_id,mediaType:5,disabledChoice:true"></media-choice-button>

</script>

参数说明:

value:微信公众号媒体Id

mediaType:默认选择的媒体类型,其中(0:图片;1,语音;2,视频;5,图文)

disabledChoice:是否禁用选择

效果:

全部代码:

var instance = function (params, componentInfo) {
var self = this;
this.Name = ko.observable('请选择素材');
this.Url = ko.observable('/Content/patterns/congruent_pentagon.png');
this.Id = ko.observable('');
//默认选择的类型
this.MediaType = ko.observable('1');
//是否禁用选择框
this.DisabledChoice = ko.observable(false);
//订阅
self.MediaType.subscribe(function (newValue) {
console.debug(newValue);
self.Name('请选择素材');
self.Url('/Content/patterns/congruent_pentagon.png');
self.Id('');
});
this.ShowChoiceWindow = function (data) {
var type = self.MediaType();
var url = '';
switch (type) {
//图文
case "5":
url = '/Site_News?resourceType=5&lightLayout=1';
break;
//图片
case "0":
url = '/Site_Resources?resourceType=0&lightLayout=1';
break;
//语音
case "1":
url = '/Site_Resources?resourceType=1&lightLayout=1';
break;
//视频
case "2":
url = '/Site_Resources?resourceType=2&lightLayout=1';
break;
}
mwc.window.show('选择素材', url);
} if (params && typeof (params.value()) == 'string') {
params.value.subscribe(function (newValue) {
self.Id(newValue);
});
if (params.value().length > 0) {
self.Id(params.value());
mwc.restApi.get({
//请求地址
url: '/Site_Resources/GetJsonDataByMediaId/' + self.Id(),
//是否锁定UI
isBlockUI: true,
//可选,锁定元素
blockUI: componentInfo.element,
//成功函数
success: function (model) {
console.debug(model);
var data = model.FileBase;
if (data == null) {
return;
}
self.MediaType(model.ResourceType);
//一定要放后面,不然因为触发了订阅事件而导致相关数据被清空
self.Name(data.Name);
if (data.FrontCoverImageUrl)
self.Url(data.FrontCoverImageUrl);
else
self.Url(data.Url == null ? data.SiteUrl : data.Url);
self.Id(data.MediaId);
console.debug(ko.toJS(self));
}
});
}
if (params.mediaType) {
self.MediaType(params.mediaType);
}
if (params.disabledChoice) {
self.DisabledChoice(params.disabledChoice);
}
}
window.choice = function (data) {
params.value(data.MediaId);
self.Id(data.MediaId);
self.Name(data.Name);
if (data.FrontCoverImageUrl) {
self.Url(data.FrontCoverImageUrl);
} else
self.Url(data.Url == null ? data.SiteUrl : data.Url);
}
};
var newschoiceViewModelInstance = {
createViewModel: function (params, componentInfo) {
return new instance(params, componentInfo);
}
};
//资源选择
ko.components.register('media-choice-button', {
viewModel: newschoiceViewModelInstance,
template: '' +
'<div class="form-group">' +
'<label class="col-sm-2 control-label">类型:</label>' +
'<div class="col-sm-10">' +
'<select class="form-control" data-bind="value:MediaType,disable:DisabledChoice" data-val="true" data-val-required="类型 字段是必需的。">' +
'<option value="0">图片</option>' +
'<option value="1">语音</option>' +
'<option value="2">视频</option>' +
'<option value="5">图文</option>' +
'</select>' +
'</div>' +
'</div>' +
'<div class="form-group">' +
'<div class="col-sm-12">' +
'<div>' +
'<div class="panel panel-default" data-bind="click:ShowChoiceWindow">' +
'<div class="panel-body" id="content">' +
'<p data-bind="if:MediaType()==0">' +
'<img style="width:150px;height:100px" data-bind="attr:{src:Url}" />' +
'</p>' +
'<p data-bind="if:MediaType()==1 && Id()!=\'\'">' +
'<audio style="width:250px;height:100px" controls="controls" data-bind="attr:{src:Url}" />' +
'</p>' +
'<p data-bind="if:MediaType()==2 && Id()!=\'\'">' +
'<video style="height:100px !important;width:250px !important" controls="controls" data-bind="attr:{src:Url}" />' +
'</p>' +
'<p data-bind="if:MediaType()==5">' +
'<img style="width:150px;height:100px" data-bind="attr:{src:Url}" />' +
'</p>' +
'<div>' +
'<p data-bind="text:Name">' + '</p>' +
'</div>' +
'<!-- ko if:Id()==\"\" && "1,2".indexOf(MediaType())!=-1 -->' +
'<p>' +
'<a class="btn btn-primary btn-block m-t" data-bind="click:$root.ShowChoiceWindow">'
+ '<i class="fa fa-plus">' + '</i>选择素材</a>' +
'</p>' +
'<!-- /ko -->' +
'</div>' +
'</div>' +
'</div>' +
'</div>' +
'</div>'
});

Magicodes.WeiChat——媒体资源选择组件之media-choice(开源)的更多相关文章

  1. Magicodes.WeiChat——版本发布历史

    购买地址:https://item.taobao.com/item.htm?id=520205558575 您可以在新标签页打开此图,以查看原始图片. Magicodes.WeiChat为湖南心莱信息 ...

  2. Magicodes.WeiChat——自定义knockoutjs template、component实现微信自定义菜单

    本人一向比较喜欢折腾,玩了这么久的knockoutjs,总觉得不够劲,于是又开始准备折腾自己了. 最近在完善Magicodes.WeiChat微信开发框架时,发现之前做的自定义菜单这块太不给力了,而各 ...

  3. Magicodes.WeiChat——V3.0(多租户)版本发布

    主要内容如下: 添加项目Magicodes.WeiChat.Data.Multitenant,全面支持多租户(基于EF已经ASP.NET Identity) 增加租户管理.租户成员管理.修改密码.公众 ...

  4. Magicodes.WeiChat——ASP.NET Scaffolding生成增删改查、分页、搜索、删除确认、批量操作、批量删除等业务代码

    关于T4代码生成这块,我之前写过几篇帖子,如:<Magicodes.NET框架之路——让代码再飞一会(ASP.NET Scaffolding)>(http://www.cnblogs.co ...

  5. Magicodes.WeiChat——使用AntiXssAttribute阻止XSS(跨站脚本攻击)攻击

    跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击者往Web页面里插 ...

  6. Magicodes.WeiChat——后台JS框架封装

    Magicodes.WeiChat同时也致力于提高后台开发效率,因此对在后台前端这块也做了一定的封装.我们先来说说主要的框架JS——mwc.js和mwc_elements.js.这两个JS文件位于Sc ...

  7. Orchard官方文档翻译(九) 新增并管理媒体资源

    原文地址:http://docs.orchardproject.net/Documentation/Adding-and-managing-media-content 想要查看文档目录请用力点击这里 ...

  8. Magicodes.WeiChat——发送模板消息

    在微信开发中,经常会使用到模板消息.因此框架中对此进行了一些封装,并且提供了后台操作界面以及日志查看等功能,下面开始逐步介绍开发操作以及使用. 微信公众平台配置 首先,需要申请开通模板消息功能,如下图 ...

  9. vue仿京东省市区三级联动选择组件

    工作中需要一个盒京东购物车地址选择相似的一个省市区三级联动选择组件,google查了下都是下拉框形式的,于是自己写了一个,希望对使用vue开发项目的朋友有帮助,显示效果如下:使用vue2.0开发 ht ...

随机推荐

  1. Selenium+Python+Eclipse网页自动化集成环境配置(附简单的测试程序)

    最近公司在给我们培训,主要是网页自动化测试的,现在的工作每天都是测APP,刚刚入门,不过,当我看了别人写的bug之后,就觉得不会觉得能够发现bug多么多么的厉害了. 前两周的时间一直在搭建自动化测试的 ...

  2. 將後台的Json數據返回到前台

    前台JS代碼 $.post('/Book/GetBookClassIDByName', { BookName: "旅遊手冊" }, function (data) { if (da ...

  3. 多台web如何共享session进行存储(转载)

    session的存储了解以前是怎么做的,搞清楚了来龙去脉,才会明白进行共享背后的思想和出发点.我喜欢按照这样的方式来问(或者去搞清楚):为什么要session要进行共享,不共享会什么问题呢? php中 ...

  4. 基于WDF的PCI/PCIe接口卡Windows驱动程序(4)- 驱动程序代码(源文件)

    原文出处:http://www.cnblogs.com/jacklu/p/4687325.html 本篇文章将对PCIe驱动程序的源文件代码作详细解释与说明.整个WDF驱动程序工程共包含4个头文件(已 ...

  5. Docker私有仓库 Registry中的镜像管理

    这里主要介绍Registry v2的版本 查看Registry仓库中现有的镜像: # curl -XGET http://10.0.30.6:5000/v2/_catalog# curl -XGET ...

  6. 无法连接到已配置的开发web服务器

    http://jingyan.baidu.com/article/29697b91099847ab20de3c8b.html 这是防火墙造成的,将防火墙关闭即可

  7. 更好更快更高效解析JSON说明

    现在来一个实例解析类,直接就把解析JSON到QVariant去了.唯一不足的是没有搞错误处理,具体方法也请各位自行参考json-c的发行文档,这样比较方便叙述,STL或者Boost我都没有认真接触过, ...

  8. SQL Server 查询处理中的各个阶段(SQL执行顺序)

    SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后 ...

  9. js 获取 通过 ”?“ 或者 ”&“ url 传过来参数值

    请先 引用 jQuery的js <script> String.prototype.GetValue=function(para) { var reg = new RegExp(" ...

  10. wget net-tools

    新安装的centos7 minimal 没有安装 wget 需要安装一下,才能安装lnmp yum -y install wget yum -y install net-tools