我刚刚开始使用ColdFusion OOP,我想制作一个DIV,根据用户所在的页面以及他们拥有的登录权限(角色)显示不同的用户链接.基本上是'上下文'菜单.
我应该将此工具栏/导航DIV放在.cfm或.cfc文件中吗?
重申一下; cfm或cfc文件需要知道用户所在的页面,并且还要检查他们所拥有的角色.根据这两条信息,它将显示一组指向用户的链接.角色信息来自数据库并存储在SESSION变量中,并找出它们所在的页面,我猜它可以使用#GetFileFromPath(GetBaseTemplatePath())#.
我的第一个想法是拥有一个普通的.cfm文件,将所有的表示和逻辑放在该文件中(HTML和许多<cfif>语句),以确保在DIV中显示正确的信息,然后用于<cfinclude>在页面上显示它.然后我开始考虑也许我应该制作一个自定义标签并要求调用页面传递用户的凭证和#GetFileFromPath(GetBaseTemplatePath())#as参数,然后让该自定义标签返回所有的表示数据.
最后我想CFC也可以做到这一点,但我打破了在CFC中提供表现和逻辑数据的"规则".
有关最佳实践的任何建议,以实现我想要做的事情?它最终将服务于数千名客户,因此我需要确保我的解决方案易于扩展.
我有一个CFC,它包含一个运行一个存储过程然后输出两个结果集的方法/函数.像这样(缩短了阅读速度的代码):
<cffunction name="OrdersandRegions" returntype="query" returnformat="JSON">
<cfstoredproc procedure="GetUserInfo">
<cfprocresult name = "UserOrders" resultset="1">
<cfprocresult name = "UserRegions" resultset="2">
</cfstoredproc>
<!--- Currently only returning 1 resultset as JSON --->
<cfreturn UserOrders>
</cffunction>
Run Code Online (Sandbox Code Playgroud)
首先,我可以从单个方法返回结果集UserOrders和UserRegions结果集吗?
如果这不在CFC中并且在CFM页面内,那么我可以通过使用#UserOrders.OrderID#或#UserRegions.UserID#例如轻松访问这两个结果.
因为它是从CFC返回的,也是作为JSON数据返回的,我如何实现我想要实现的目标?
我<cfinclude>用来在母版页中包含各种页面.在我的母版页中,所有正文内容都包含在<cfoutput>标签中.但是我注意到,经过测试,包含的.cfm页面根本看不到<cfoutput>标签,因此不显示动态数据.
<body>
<cfoutput>
<cfinclude template="page1.cfm" />
<cfinclude template="page2.cfm" />
<cfinclude template="page3.cfm" />
</cfoutput>
</body>
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,包含动态数据的包含模板将无法正确显示.要解决这个问题,我必须<cfoutput>在每个CFM文件中添加标签.为什么他们不能使用<cfoutput>身体内已有的标签?
我有一个Post显示用户帖子的组件。到达帖子的 URL/路线如下:
http://localhost:8080/123-todays-bike-ride作为路线中的参数123。PostID
在我的Post.vue组件中,我有以下代码:
<template>\n <div>\n <h1>{{Post.PostTitle}}</h1>\n <p>{{Post.Content}}</p>\n </div>\n</template>\n\n<script>\n export default {\n name: "Post",\n watch:{\n \'$route.params.PostID\': function() {\n this.getPost(); // does not seem to be triggered?\n }\n },\n computed:\n {\n Post() {\n return this.$store.getters.getPost\n }\n },\n serverPrefetch() {\n return this.getPost(); // to do with SSR\n },\n mounted() {\n if (this.Post == null || !this.Post.length) {\n this.getPost();\n }\n },\n methods: {\n getPost() {\n return this.$store.dispatch(\'loadPost\', {PostID: this.$route.params.PostID})\n\n }\n }\n }\n</script>\n …Run Code Online (Sandbox Code Playgroud) 我一直使用动态WHERE语句COALESCE()来返回传入的值或返回所有记录.
但是当我需要检查两列时,我似乎无法做到这一点,如果没有传入参数则返回所有记录.这是我的代码片段:
DECLARE @MaxAge INT = NULL --- Example value: 5
SELECT
*
FROM
dbo.Vehicle
WHERE
DATEPART(YEAR, RegistrationDate) <=
CASE
WHEN @MaxAge IS NOT NULL
THEN (DATEPART(YEAR,GETDATE()) - @MaxAge)
ELSE DATEPART(YEAR, RegistrationDate)
END
OR
DATEPART(YEAR, ProductionDate) <=
CASE
WHEN @MaxAge IS NOT NULL
THEN (DATEPART(YEAR,GETDATE()) - @MaxAge)
ELSE DATEPART(YEAR, ProductionDate)
END
Run Code Online (Sandbox Code Playgroud)
我想做的事(用简单的英语)是:
给我车辆表中的所有行,其中RegistrationDate的YEAR部分小于@MaxAge,或者ProductionDate的YEAR部分小于@MaxAge.如果@MaxAge为NULL,那么无论何时制作或注册,都要全部给我.
RegistrationDate如果车辆尚未注册,有时表中的值将为NULL.ProductionDate如果卖家根本不知道何时制作,有时可以为NULL.
解决这个问题的最佳方法是什么?我已经尝试过查看SQL书籍和在线,但是找不到任何可以匹配这种情况的东西.
我刚刚开始使用 Node.js 和 Vue.js,我注意到 Vue.js 有一个 Vue CLI 工具包(无论这意味着什么),它为您提供了一个脚手架项目(我认为不需要它?),但它还添加了 ESLint 和 Babel。
问题是,它像这样添加它们:
"plugins": {
"@vue/cli-plugin-babel": {},
"@vue/cli-plugin-eslint": {
"config": "airbnb",
"lintOn": ["save", "commit"]
}
}
Run Code Online (Sandbox Code Playgroud)
Vue 的 Babel 和使用 NPM 安装 Babel 有什么区别@vue/cli-plugin-babel?为什么要这样做vue add cli-plugin-eslint而不是npm install eslint?
我在我的网络应用程序中创建了一个通用商店Products。当然,网站需要在不同页面上显示许多不同类型的产品。所以我最终用多个状态来代表每个状态。这是我的商店:
const state = {
HomepageOffers:[],
Product: []
};
const getters = {
getHomepageOffers: (state) => state.HomepageOffers,
getProduct: (state) => state.Product
};
const actions = {
loadHomepageOffers({commit}) { // get all products to be featured on homepage
axios.get('/api/homepageoffers')
.then(response => {
commit('setHomepageOffers', response.data[0])
}).catch(function (error) {
console.log(error.response.data);
}
)
},
loadProduct(context, {ProductID}) { // gets a single product based on ProductID passed in URL
axios.get(`/api/${ProductID}`)
.then(response => {
context.commit('setProduct', response.data[0])
}).catch(function (error) {
console.log(error.response.data);
console.log(error.response.status);
console.log(error.response.headers);
}
) …Run Code Online (Sandbox Code Playgroud) 我有一个带有<router-link>查看标签的主页。这是一个简单的主/明细关系,其中Homepage是产品目录,Product明细页面/视图显示每个项目的信息。
当我第一次启动网站并单击Homepage视图上的一个项目(例如 URL: http://localhost:8080/100-sql-server-2019-licence)时,Product视图被加载并且产品详细信息加载正常。
如果我然后按浏览器中的后退按钮返回到Homepage,然后单击不同的Product(例如 URL: http://localhost:8080/101-oracle-12c-licence),则浏览器地址栏中的 URL 会更改,但我会获得以前产品的信息。它闪电般快速,并且没有完成新的网络调用,这意味着它只显示先前产品的缓存页面。如果我在该页面上点击刷新按钮,则会进行网络调用并显示正确的产品信息。
我在网上进行了搜索,但在搜索结果中找不到描述的这个问题。谁能指出我如何在路线更改时刷新/重新渲染路线的正确方向?
我用来Vue Meta 3向网站提供元数据。该 API 在这里
我不明白如何提供自定义元标记(例如 Open Graph 标记,例如og:type)。这是我在组件中尝试做的事情:
setup() {
useMeta({
title: "Homepage",
meta: [
{name: "hunky:dory", content: "website"}
],
description: "This is the homepage."
})
},
Run Code Online (Sandbox Code Playgroud)
输出的 HTML 最终如下所示:
<head>
<title>Homepage</title>
<meta name="description" content="This is the homepage.">
<meta name="meta" content="website"> <!-- should be <meta name="hunky:dory content="website"> -->
</head>
Run Code Online (Sandbox Code Playgroud)
如果我将代码更改为:
setup() {
useMeta({
title: "Homepage",
"hunky:dory": [
{content: "website"}
],
description: "This is the homepage."
})
},
Run Code Online (Sandbox Code Playgroud)
我得到非法的 HTML 输出:
<head>
<title>Homepage</title>
<meta name="description" …Run Code Online (Sandbox Code Playgroud) 我在一个名为的表中有重复的数据bank_currency,如下所示:
currencyid | bankid
--------------------
8 1
8 1
8 1
16 2
16 2
16 2
14 3
14 3
14 3
Run Code Online (Sandbox Code Playgroud)
我不知道为什么数据被重复一式三份,但我需要删除所有重复项并仅保留每行之一。所以我最终是这样的:
currencyid | bankid
--------------------
8 1
16 2
14 3
Run Code Online (Sandbox Code Playgroud)
我无法ORDER BY或告诉 postgresql 要保留哪一行,因为它们是重复的bankid。currencyid也许是一个订单ROW_NUMBER(如果可能的话)并保持最低ROW_NUMBER?任何建议都非常感激。
vue.js ×5
coldfusion ×3
vue-router ×2
vuejs2 ×2
coldfusion-8 ×1
coldfusion-9 ×1
json ×1
node.js ×1
npm ×1
postgresql ×1
sql ×1
sql-server ×1
vue-meta ×1
vuejs3 ×1
vuex ×1
vuex-modules ×1